這是我寫的一個腳本,用於刪除超過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
非常好!但是,爲什麼要斷開和重新連接文件?保持連接打開。 – dotancohen
偉大的腳本感謝:)但我有一個錯誤「價值太大基地(錯誤標記爲」08「)」當$ DD是0x它被解釋爲八進制的x(問題8和9) – jsan
'刪除舊的文件不是年7月6 試圖 日期FTP 12672814文件:7 日期FTP 12672913文件:1個 日期FTP 12672889文件:7 日期FTP 1099121178文件:7 日期FTP 1099121165文件:1個 日期FTP 1099121206文件:7 日期文件: 刪除 嘗試62.210.17.5 ... (遠程文件)無法刪除退出:沒有這樣的文件或目錄' – Ghayel