new script: archive-mails
This commit is contained in:
		
							parent
							
								
									6886432099
								
							
						
					
					
						commit
						e1106a77bd
					
				
					 1 changed files with 59 additions and 0 deletions
				
			
		
							
								
								
									
										59
									
								
								misc/archive-mails
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										59
									
								
								misc/archive-mails
									
										
									
									
									
										Executable file
									
								
							|  | @ -0,0 +1,59 @@ | ||||||
|  | #!/bin/zsh | ||||||
|  | 
 | ||||||
|  | CURRENT_TIME=$(date +%s) | ||||||
|  | CURRENT_DATE=$(date --iso-8601) | ||||||
|  | ORIG_DIR=$PWD | ||||||
|  | 
 | ||||||
|  | # calculate age of mail in days | ||||||
|  | mail-age() { | ||||||
|  | 	local mail_time=$(grep -m 1 -e '^Date:' $1\ | ||||||
|  | 			| awk -F' ' '{$1=""; print}' \ | ||||||
|  | 			| xargs --null date +%s -d) | ||||||
|  | 	echo $(((CURRENT_TIME - mail_time)/86400)) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | for maildir in $@; do | ||||||
|  | 	if [[ -d $maildir/cur ]]; then | ||||||
|  | 		name=${maildir:a:t} | ||||||
|  | 		maildir=$maildir/cur | ||||||
|  | 	else | ||||||
|  | 		name=${maildir:a:h:t} | ||||||
|  | 	fi | ||||||
|  | 	archive=/tmp/archive-mails/$maildir/archive.$CURRENT_DATE | ||||||
|  | 	<<-LOG | ||||||
|  | 		Going to archive: | ||||||
|  | 		maildir: $maildir | ||||||
|  | 		name:    $name | ||||||
|  | 		archive: $archive | ||||||
|  | 
 | ||||||
|  | 		Continue? [y/n] | ||||||
|  | 	LOG | ||||||
|  | 	read -q || exit 1 | ||||||
|  | 	 | ||||||
|  | 	# create maildir structure, so that backup can be opened with an email | ||||||
|  | 	# client directly | ||||||
|  | 	mkdir -p $archive/cur $archive/new $archive/tmp | ||||||
|  | 	 | ||||||
|  | 	printf "Archived: 0" | ||||||
|  | 	num=0 | ||||||
|  | 
 | ||||||
|  | 	for mail in $maildir/*(.); do | ||||||
|  | 		if [[ $(mail-age $mail) -gt 365 ]]; then | ||||||
|  | 			mv $mail $archive/cur | ||||||
|  | 			printf "\rArchived: $((++num))" | ||||||
|  | 		fi | ||||||
|  | 	done | ||||||
|  | 	echo | ||||||
|  | 
 | ||||||
|  | 	echo "Compressing..." | ||||||
|  | 	cd /tmp/archive-mails/$maildir/ | ||||||
|  | 	tar --xz -cf $archive.tar.xz archive.$CURRENT_DATE | ||||||
|  | 	cd $ORIG_DIR | ||||||
|  | 	if [[ -n $MAILDIR ]]; then | ||||||
|  | 		mkdir -p $MAILDIR/archive/$name | ||||||
|  | 		mv $archive.tar.xz $MAILDIR/archive/$name | ||||||
|  | 		echo "Created $MAILDIR/archive/$name/${archive:t}.tar.xz" | ||||||
|  | 	else | ||||||
|  | 		echo "Created $archive.tar.xz" | ||||||
|  | 	fi | ||||||
|  | done | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Alexander Gehrke
						Alexander Gehrke