标题很难解释。
我有一个Bash脚本,每天运行一次,将一个文件夹备份到一个zip文件中。 这些zip文件的名称为worldYYYYMMDD
.zip,其中YYYYMMDD
是备份日期。 我想要做的是删除除最近的5个备份之外的所有备份。按字母顺序排序文件将首先列出最旧的文件,所以我基本上需要在按字母顺序排序时删除除最后5个文件之外的所有文件。
标题很难解释。
我有一个Bash脚本,每天运行一次,将一个文件夹备份到一个zip文件中。 这些zip文件的名称为worldYYYYMMDD
.zip,其中YYYYMMDD
是备份日期。 我想要做的是删除除最近的5个备份之外的所有备份。按字母顺序排序文件将首先列出最旧的文件,所以我基本上需要在按字母顺序排序时删除除最后5个文件之外的所有文件。
ls world*.zip | head -n -5 | xargs -r rm
ls world*.zip
: 按字母顺序列出文件alphabeticallyhead -n -5
: 过滤掉除了最后5行以外的所有行xargs -r rm
: 删除每个给定的文件。 -r
: 如果输入为空,则不运行rm
ls -AF world*.zip
会更好。 - Benoit-F
。 - Dennis Williamsonxargs -r rm
命令的最后一个参数有效,否则将会出现错误。 - dalyonsfind /your/directory -name 'world*.zip' -mtime +5 | xargs rm
在进行操作之前,请先测试一下。这将删除所有早于5天的world*.zip
文件。因此,逻辑与您拥有的不同。
我现在无法测试它,因为我没有Linux机器,但我认为应该是这样的:
rm `ls -A | head -5`
ls | grep ".*[\.]zip" | sort | tail -n-5 | while read file; do rm $file; done
sort
命令用于对文件进行排序tail -n-5
命令返回除了最近的 5 个之外的所有内容while
循环用于执行删除操作echo world*.zip | sort | tail -n -5 | xargs rm
更为高效。 - Benoitgrep
是不必要的。@Benoit:echo
输出在一行上,所以排序是无效的。 - Dennis Williamsonls world*.zip | sort -r | tail n+5 | xargs rm
sort -r
会按照相反的顺序排序,所以最新的文件将排在前面
tail n+5
将输出从第五行开始的所有行
xargs rm
将删除这些文件。Xargs 用于将 stdin 作为参数传递给 rm。