始终在dir中保留n个最新文件

时间:2015-02-06 09:01:10

标签: bash sorting pipe wc

我正在尝试创建一个单行程序,它应该从dir中删除多余的文件以避免占用太多空间。

ls -r --sort=time | head -${{ls | wc -l} - n} | xargs rm -f

n应代表我想保留在目录中的文件数。

我在这里做错了,无法弄清楚是什么。有人可以帮忙吗?

2 个答案:

答案 0 :(得分:0)

${{...}}模糊地看起来像TCL或其他东西。它当然不是有效的shell脚本。

在Bash中(但不在Bourne shell中),你可以使用(( ... ))进行算术表达式,我想这就是你想要的“ - n”。

进程替换的语法是带有圆括号的$(ls | wc -l)

合并这两者,你最终可能会得到像(($(ls | wc -l) - n))这样的东西但你真的should not be parsing ls output。看看这个问题的许多重复之一,以获得更好的方法。

答案 1 :(得分:0)

( ls -t | head -n 25 ; ls ) | sort | uniq -u | sed -e 's,.*,"&",g' | xargs rm

为我做了诀窍。

Delete all but the most recent X files in bash< - here

感谢您的回复。