ubuntu Bash脚本删除所有文件,但N个文件时,排序

7hiiyaii  于 2023-10-17  发布在  其他
关注(0)|答案(5)|浏览(126)

很难在标题中解释。
我有一个bash脚本,每天运行一个文件夹备份到一个zip文件。zip文件名为worldYYYYMMDD.zip,其中YYYYMMDD是备份日期。我想做的是删除所有,但5个最近的备份。排序的文件将列出最旧的第一,所以我基本上需要删除所有,但最后5个文件时,按字母顺序排序。

6kkfgxo0

6kkfgxo01#

下面的代码行应该可以做到这一点。

ls world*.zip | head -n -5 | xargs -r rm
  • ls world*.zip:列出文件alphabetically
  • head -n -5:过滤除最后5行以外的所有行
  • xargs -r rm:删除每个给定的文件。-r:如果输入为空,则不运行rm
ddarikpa

ddarikpa2#

不如这样吧:

find /your/directory -name 'world*.zip' -mtime +5 | xargs rm

先测试一下。这将删除所有超过5天的world*.zip文件。所以逻辑和你不一样。

yeotifhr

yeotifhr3#

我现在不能测试它,因为我没有Linux机器,但我认为它应该是:

rm `ls -A | head -5`
x33g5p2x

x33g5p2x4#

ls | grep ".*[\.]zip" | sort | tail -n-5 | while read file; do rm $file; done
  • sort排序文件
  • tail -n-5返回除5个最近的
  • while循环执行删除操作
5sxhfpxr

5sxhfpxr5#

ls world*.zip | sort -r | tail n+5 | xargs rm
sort -r将以相反的顺序排序,因此最新的将位于顶部
tail n+5将输出行,从第5行开始
xargs rm将删除文件。Xargs用于将stdin作为参数传递给rm。

相关问题