很难在标题中解释。我有一个bash脚本,每天运行一个文件夹备份到一个zip文件。zip文件名为worldYYYYMMDD.zip,其中YYYYMMDD是备份日期。我想做的是删除所有,但5个最近的备份。排序的文件将列出最旧的第一,所以我基本上需要删除所有,但最后5个文件时,按字母顺序排序。
YYYYMMDD
6kkfgxo01#
下面的代码行应该可以做到这一点。
ls world*.zip | head -n -5 | xargs -r rm
ls world*.zip
head -n -5
xargs -r rm
-r
rm
ddarikpa2#
不如这样吧:
find /your/directory -name 'world*.zip' -mtime +5 | xargs rm
先测试一下。这将删除所有超过5天的world*.zip文件。所以逻辑和你不一样。
world*.zip
yeotifhr3#
我现在不能测试它,因为我没有Linux机器,但我认为它应该是:
rm `ls -A | head -5`
x33g5p2x4#
ls | grep ".*[\.]zip" | sort | tail -n-5 | while read file; do rm $file; done
sort
tail -n-5
while
5sxhfpxr5#
ls world*.zip | sort -r | tail n+5 | xargs rmsort -r将以相反的顺序排序,因此最新的将位于顶部tail n+5将输出行,从第5行开始xargs rm将删除文件。Xargs用于将stdin作为参数传递给rm。
ls world*.zip | sort -r | tail n+5 | xargs rm
sort -r
tail n+5
xargs rm
5条答案
按热度按时间6kkfgxo01#
下面的代码行应该可以做到这一点。
ls world*.zip
:列出文件alphabeticallyhead -n -5
:过滤除最后5行以外的所有行xargs -r rm
:删除每个给定的文件。-r
:如果输入为空,则不运行rm
ddarikpa2#
不如这样吧:
先测试一下。这将删除所有超过5天的
world*.zip
文件。所以逻辑和你不一样。yeotifhr3#
我现在不能测试它,因为我没有Linux机器,但我认为它应该是:
x33g5p2x4#
sort
排序文件tail -n-5
返回除5个最近的while
循环执行删除操作5sxhfpxr5#
ls world*.zip | sort -r | tail n+5 | xargs rm
sort -r
将以相反的顺序排序,因此最新的将位于顶部tail n+5
将输出行,从第5行开始xargs rm
将删除文件。Xargs用于将stdin作为参数传递给rm。