Bash脚本在按字母顺序排序时删除除N个文件以外的所有文件

时间:2011-01-27 14:06:37

标签: linux bash ubuntu

标题中很难解释。

我有一个每天运行的bash脚本将一个文件夹备份到一个zip文件中。 zip文件名为 world YYYYMMDD .zip ,其中YYYYMMDD为备份日期。我想要做的是删除除最近的5个备份以外的所有备份。按字母顺序对文件进行排序将首先列出最旧的文件,因此除了按字母顺序排序的最后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。