标题中很难解释。
我有一个每天运行的bash脚本将一个文件夹备份到一个zip文件中。 zip文件名为 world YYYYMMDD
.zip ,其中YYYYMMDD
为备份日期。我想要做的是删除除最近的5个备份以外的所有备份。按字母顺序对文件进行排序将首先列出最旧的文件,因此除了按字母顺序排序的最后5个文件外,我基本上需要删除所有文件。
答案 0 :(得分:19)
以下一行应该可以解决问题。
ls -F world*.zip | head -n -5 | xargs rm
ls -F
:按字母顺序列出文件head -n -5
:过滤掉除最后5个xargs rm
:删除每个给定的文件。答案 1 :(得分:3)
这个怎么样:
find /your/directory -name 'world*.zip' -mtime +5 | xargs rm
之前测试过。这应删除超过5天的所有world*.zip
个文件。所以逻辑不同于你。
答案 2 :(得分:1)
我现在无法测试,因为我没有Linux机器,但我认为它应该是:
rm `ls -A | head -5`
答案 3 :(得分:0)
ls | grep ".*[\.]zip" | sort | tail -n-5 | while read file; do rm $file; done
sort
对文件进行排序tail -n-5
返回除最近的5个while
循环执行删除答案 4 :(得分:0)
ls world*.zip | sort -r | tail n+5 | xargs rm
sort -r
将按相反的顺序排序,因此最新的将位于顶部
tail n+5
将从第5个
xargs rm
将删除文件。 Xargs用于将stdin作为参数传递给rm。