我真的很抱歉这个可怕的标题,这是我能用最好的措辞来形容它。
所以我有一个备份脚本,它创建一些服务器数据的备份 tar 并将其存储在 /server/backups 中,但是我只需要上周的备份,因此我创建了这个脚本作为每周任务运行并清理我的备份文件夹:
#!/bin/bash
#initializing a with the amount of backup archives and b with the target max
a=find /server/backups/ -type f | wc -l
b=14
#if there are more backup files than target max
#delete the oldest files
if [ $a > $b ]
then
ls -1t /server/backups/ | tail -n +15 | xargs rm -f
fi
但它不起作用。我对 Linux 很陌生,我不知道如何“调试”它。
答案1
a=find /server/backups/ -type f | wc -l
这将运行命令/server/backups/
并将环境变量a
设置为find
。或者实际上它可能只是因为尾随斜杠而给出错误。你想要的是一个命令替换。
if [ $a > $b ]
这里>
是一个细绳比较,因此 例如2
会大于14
。您应该引用变量,但如果它们只保存数字,这可能不是问题。
ls -1t /server/backups/ | tail -n +15 | xargs rm -f
在这里,包含空格、引号或换行符的文件名存在明显的问题(因为xargs
默认情况下如何解释其输入,并且因为tail
处理行)。但如果我们可以忽略这一点,如果你的文件名“不错”,和你有 GNU xargs,那么你可以运行
ls -t /server/backups/ | tail -n +15 | xargs -d '\n' -r rm
tail
因为如果少于 15 行, 输出将为空。-d '\n'
告诉 xargs 读取整行,而不是默认情况下可能被引用的空格分隔的单词,并-r
告诉它在没有任何参数的情况下不运行该命令。两者都不是标准功能。