2011-10-25 23 views
0

私のUbuntuサーバー用の小さなバックアップスクリプトを作成しています。ファイルはtarされ、一時的なフォルダにローカルに圧縮され、lftp経由でftpサーバーにアップロードされ、最後にローカルで削除されます。サーバーへlftp/ftpで古いバックアップフォルダを削除します

保存ファイル:

FTPSUBDIR=`date --utc +"%Y-%m-%d"` 
echo "mkdir -p /daily/${FTPSUBDIR}; mirror --reverse ${TEMPDIR} /daily/${FTPSUBDIR};" | /usr/bin/lftp -u "$FTPUSER,$FTPPASS" "$FTPSERV" 

ftpサーバ上のフォルダ構造:

/ 
    daily 
    2011-10-25 
    2011-10-24 
    2011-10-23 
    weekly 
    2011-10-23 
    2011-10-16 
    2011-10-09 

がどのように(毎週4、毎日のために5)のみのx、最新のバックアップを保持しますFTPサーバー上の他のフォルダを削除しますか?

答えて

2

リモートシステムでのftp操作だけでは、ftpクライアント側でより積極的に対応する必要があります。

デバッグされていないコードの断片が続きます...あなたは肉付けしてデバッグする必要があります。

# print results of directory list to standard out 
ftp_dir() 
{ 
    typeset dir="$1"; 
    ftp <<'FTP' 
login 
connection and 
cd 
directory commands 
FTP 
} 

# read delete commands (or others) from stdin using inline login 
ftp_delete() 
{ 
    cat <<FTP - | ftp 
send FTP login and delete commands 
FTP 
} 

do_delete() 
{ 
    typeset dir="$1"; 
    typeset cnt="$2"; 
    if [ ${#names} -gt $cnt ]; then 
      typeset a_end=$((${#names} - 8)); 
      (typeset n=0; 
      while [ $n -lt a_end ]; do 
       echo "delete $dir/${names[$n]}"; 
       n=$(($n + 1)); 
      done;) | ftp_delete 
     fi 
} 

names=($(ftp_dir weekly | sort)); #get all entries 
do_delete dir 4 

私がもっと目を覚ますと、より良い答えが出てくるかもしれません。

1

これは私が古いバックアップを削除することが分かっ最も簡単な方法です。この場合は

HOST='ftpback.net' 
USER='username' 
PASSWD='pass' 
FILE="file.tar.gz" 
DELPREFIX=$(date -d 'now -2 month' +'%y-%m') 

ftp -n $HOST <<END_SCRIPT 
quote USER $USER 
quote PASS $PASSWD 
cd mysql 
put $FILE 
mdel "$DELPREFIX*" 
y 
quit 
END_SCRIPT 
exit 0 

DELPREFIXは最後の前の月に等しく、それが11月の場合、日付は、例えば、9月になります'15 -09 '

FTPでは、DELPREFIXで始まるファイルがすべて削除されます。 '15 -09 'これにより、ファイルをその日まで削除することはできませんが、バックアップの量を変えることができれば、他のスクリプトソリューションより簡単です。

ファイル名を少し変更する必要があるかもしれません。

関連する問題