好的,我想要做的是非常具体的。我需要一些代码来删除基于integer.name的目录中的文件。
目录中的文件列出如下
441.TERM (the # is actually a PID so it'll be random)
442.TERM
无论我总是希望保留第一个.TERM文件&之后删除任何.TERM文件,因为我的脚本不应该创建多个文件,但是由于我编写脚本的系统存在一些问题,有时会发生这种情况。我只希望它影响我的000.TERM文件,它在目录中找到的任何其他文件都可以保留。因此,如果目录包含任何.TERM文件,其整数高于找到的第一个整数,则删除整数较高的.TERM文件。
PS。 .TERM不是扩展,以防万一有任何混淆。
答案 0 :(得分: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
保证数字排序(在06之前出现5)。
tail -n +2
跳过第一行并返回其余
xargs rm
将每个输出行发送到rm
命令,将其删除。 -r
如果没有输出管道输出,则会跳过rm
,但会被列为GNU扩展名。
上面的脚本非常强大,可以满足您的需求,但如果目录中有太多文件不适合一个命令行,则可能会失败,如果任何匹配的文件名以某种方式包含一个文件名,可能会让您遇到麻烦换行符。