0

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

目录中的文件是这样列出的

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

不管我总是想保留第一个 .TERM 文件并在此之后删除任何 .TERM 文件,因为我的脚本最多只能创建一个文件,但由于我正在编写脚本的系统存在一些问题,有时确实会发生这种情况. 我只希望它影响我的 000.TERM 文件,它在目录中找到的任何其他文件都可以保留。因此,如果目录包含任何整数大于找到的第一个整数的 .TERM 文件,则删除整数更高的 .TERM 文件。

PS。.TERM 不是扩展名,以防万一有任何混淆。

4

1 回答 1

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默认开启,这将导致每个套接字=在列表中以 a 结尾。)

  • sort-k1使用句点作为分隔符 ( )按第一个字段 ( ) 对它们进行排序-t.-n保证数字排序(例如 5 在 06 之前)。

  • tail -n +2跳过第一行并返回其余行

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

上面的脚本对于您的需求来说相当健壮,但是如果您的目录中有太多文件以致它们不适合一个命令行,则可能会失败,并且如果任何匹配的文件名以某种方式包含换行符,则可能会给您带来麻烦。

于 2013-07-24T23:19:51.433 回答