2013-07-24 77 views
0

好吧,我想要做的是非常具体。我需要一些代码,可以从基于integer.name的目录中删除文件。基于integer.name删除文件

在目录中的文件将列出这样

441.TERM (the # is actually a PID so it'll be random) 
442.TERM 

不管是什么,我总是想保持第一.TERM文件&删除任何文件.TERM后不超过一个都不应当创建通过我的脚本,但它确实有时是由于我正在编写的系统的一些问题。我只希望它影响我的000.TERM文件,它在目录中找到的任何其他文件都可以保留。因此,如果目录包含任何.TERM文件,并且该文件的整数高于找到的第一个整数,则删除整数更高的.TERM文件。

PS。如果有任何混淆,.TERM不是扩展名。

回答

2
find /your/path -name "*.TERM" | sort -t. -k1 -n | tail -n +2 | xargs -r rm 

让我们来分析一下:

  • find /your/path -name "*.TERM"将输出所有.TERM文件的列表。

    您也可以使用ls /your/path/*.TERM,但您可能会发现输出不可预测。 (例如:你的实现可能有-F在默认情况下,这将导致每个插座在列表中的=结束。)

  • sort排序他们用句点作为分隔符的第一场(-k1)(-t. )。 -n保证数字排序(例如,5在06之前)。

  • tail -n +2跳过前行,并返回其余

  • xargs rm每个输出线发送到一个rm命令,删除它们。 -r跳过运行rm如果没有输出输入,但列为GNU扩展。

如上面的脚本是适合您的需求相当强劲,但如果你有在他们不适合在一个命令行的目录中那么多文件可能会失败,而且可能让你陷入困境,如果任何匹配文件名以某种方式包含换行符。

+0

好吧我要测试它:-)非常感谢。我会让你知道它是怎么回事。 – Geofferey

+0

我得到它的工作:-)。我有一个错字。非常感谢你。我要再测试一下,确保没有问题。 – Geofferey

+0

对不起,忘了在最后一个中传递'-r',即使你没有任何文件要删除,它也应该工作。尽管如此,这个特定于GNU版本的xargs;如果你有其他一些* nix的味道,你将不得不跳过一两个篮框。 –