当然,我可以在 perl 等上编写一些脚本,但这太过分了。
您不需要脚本来实现预期效果 - 如果您具有 shell 访问权限来发送命令,则单行即可:
ssh user@host 'find /path/to/old_backups/* -mtime +7 -exec rm {} \;'
Run Code Online (Sandbox Code Playgroud)
-mtime +7 匹配一周前从今天午夜开始创建的文件。
小智 5
这个问题很老了,但我仍然想添加我的 bash only 解决方案,因为我来这里时只是在寻找一个。列出命令中的grep tar只是为了我自己的目的,只列出tar文件,当然可以改编。
RESULT=`echo "ls -t path/to/old_backups/" | sftp -i ~/.ssh/your_ssh_key user@server.de | grep tar`
i=0
max=7
while read -r line; do
(( i++ ))
if (( i > max )); then
echo "DELETE $i...$line"
echo "rm $line" | sftp -i ~/.ssh/your_ssh_key user@server.de
fi
done <<< "$RESULT"
Run Code Online (Sandbox Code Playgroud)
这将删除给定目录中的所有 tar 文件,但最后 7 个除外。虽然它没有考虑日期,但如果你每天只有一个备份就足够了。