9

問題があります - データベースのバックアップを FTP に保存する必要があります。FTP には 10 個を超えるバックアップを作成しないでください。つまり、FTP にバックアップを追加した後、最も古いファイルを削除して、ファイルの総数を 10 個を超えることはできません。このような ftp からの削除をどのように実装できますか? スクリプトを作成しようとしていますが、削除できません:

x=1
ftp -vn $FTP_SERVER<<!
user $FTP_LOGIN $FTP_PASSWORD
binary
put $DUMP_FILE_NAME

for i in `ls -t` do
    if [ $x -le $keep ] then
        ((x++))
        continue
    fi
    delete $i
done

bye
EOF
</i>
4

5 に答える 5

13

これは、7 日以上経過したリモート ftp サイト上のすべてのファイルを削除するために私が作成したスクリプトです。ディレクトリのリストを取得し、変更日を解析し、再接続して ndays より古いファイルを削除することで機能します。

ループにハードコードされた数字 (要素の日付) は、システムの設定によって変わる可能性があると思います。ls コマンドの戻り形式は、ローカル システムの設定によって異なります。

バックアップが毎日行われると仮定すると、ndays を 10 に設定すると問題が解決する可能性があります。

#!/bin/bash
# get a list of files and dates from ftp and remove files older than ndays
ftpsite="ftp.yourserver.com"
ftpuser="loginusername"
ftppass="password"
putdir="/public_ftp/admin/logs"

ndays=7


# work out our cutoff date
MM=`date --date="$ndays days ago" +%b`
DD=`date --date="$ndays days ago" +%d`


echo removing files older than $MM $DD

# get directory listing from remote source
listing=`ftp -i -n $ftpsite <<EOMYF 
user $ftpuser $ftppass
binary
cd $putdir
ls
quit
EOMYF
`
lista=( $listing )

# loop over our files
for ((FNO=0; FNO<${#lista[@]}; FNO+=9));do
  # month (element 5), day (element 6) and filename (element 8)
  #echo Date ${lista[`expr $FNO+5`]} ${lista[`expr $FNO+6`]}          File: ${lista[`expr $FNO+8`]}

  # check the date stamp
  if [ ${lista[`expr $FNO+5`]}=$MM ];
  then
    if [[ ${lista[`expr $FNO+6`]} -lt $DD ]];
    then
      # Remove this file
      echo "Removing ${lista[`expr $FNO+8`]}"
      ftp -i -n $ftpsite <<EOMYF2 
      user $ftpuser $ftppass
      binary
      cd $putdir
      delete ${lista[`expr $FNO+8`]}
      quit
EOMYF2


    fi
  fi
done
于 2012-09-23T13:38:13.760 に答える
-5

FTP を使用しないでください (多くの理由から)。ただし、ssh でこれを行うと、tty、環境、およびその他すべてが取得されます。また、10 日前のファイルを削除したい場合 (10 暦日経過したファイルを削除したくない場合) は、単純なfind -mtime +10 -deletefor ループに置き換えます。そう:

ssh user@host 'find $DIR -mtime +10 -delete'

FTP が必要な場合は、NcFTP を見てください。私の記憶が正しければ、そこにはかなりまともなスクリプト機能がいくつかありました。

于 2012-06-26T09:25:09.477 に答える