从远程 FTP 服务器删除超过 x 天的文件

从远程 FTP 服务器删除超过 x 天的文件

我有一个远程 FTP 服务器,我通过 cronjob 在其中存储一些备份。

问题是我只有少量空间,所以我进行增量备份。我想保留大约 14 天的备份。

除了 FTP,我没有任何其他访问服务器的权限,而且我不知道如何删除超过 x 天的文件。每个文件都有一个名称,其中包含日期

yxzNamezxy-date-y-m-d.tar.bz2 (datev-20100111.tar.bz2(

希望在这里得到一些帮助。

欢呼并感谢您即将给出的答案,

丹尼斯

/编辑

我正在尝试使用在答案中提到的 curl 来处理这部分代码

curl ftp://$FTP_SERVER --user $FTP_USER:$FTP_PASS --list-only > files.tmp
declare -a aFiles
let iCount=0
exec < files.tmp
while read sLine
do
        aFiles[$iCount]=$sLine
        ((iCount++))
done

echo -e "\n Files: \n\n\n"
echo ${aFiles[@]}

echo -e "\nfor ...\n\n\n"
for sFile in $aFiles
do
        echo -e "\nFile:" $sFile
done

但第二个循环不会给我超过 1 个文件名

干杯,

丹尼斯

答案1

您可以发送一系列命令并将lftp其包装在 shell 脚本中,该脚本可以计算太旧的文件的文件名(请参阅下面的脚本)。

TODAY=$(date --iso)                   # Today's date like YYYY-MM-DD
RMDATE=$(date --iso -d '6 days ago')  # TODAY minus X days - too old files
FTPUSER=username
FTPPW=password                        # Better load this from an encrypted file
FTPSERVER=FQDN_or_IP
LFTP=/usr/bin/lftp                    # Path to binary
TMPDIR=$(mktemp -d)                   # Your archives are here

# CAUTION: mput -E deletes local files after upload
echo -n "Uploading files via FTP... "
$LFTP << EOF
open ${FTPUSER}:${FTPPW}@${FTPSERVER}
cd backups/${HOSTNAME}
mkdir ${TODAY}
cd ${TODAY}
mput -E ${TMPDIR}/*
cd ..
rm -rf ${RMDATE}
bye
EOF
echo "Done."

确保除了你之外没有人root可以读取此脚本或将凭据放在其他地方。TMPDIR是备份本地所在的目录。当然,你需要编辑明显的部分。

HTH,
PEra

答案2

由于在此主题上发表迟来的评论而面临被否决的高风险,因此这里有一个想法。

如果您不介意文件名中的日期,并且只保留少量可管理的备份,则可以使用序数文件名:即 backup.1.tgz、backup.2.tgz、backup.3.tgz 等等。

有了这些名称,您可以在上传新的备份之前简单地重命名以前的备份。

  • 重命名备份.2.tgz备份.3.tgz
  • 重命名备份.1.tgz备份.2.tgz
  • 放入备份.1.tgz

答案3

您应该能够编写一个脚本来:

  • --list-only使用以下选项获取文件列表curl
  • 解析要删除的文件列表
  • 使用--quote--request选项发送带有选定文件名的rm或命令DELE

编辑:

您的第二个循环引用的是$aFiles标量。您需要将其引用为数组,如下所示:

for sFile in ${aFiles[@]}
do
        echo -e "\nFile:" $sFile
done

另外,您不需要临时文件。您应该能够curl通过管道传输while

相关内容