在shell脚本中使用通配符删除(rm)的文件太多?

Wig*_*ige 2 shell rm

我有一个 shell 脚本,需要删除目录中以数字开头的所有文件。该文件集已发展到包含每天需要删除的数十万个文件。该脚本包含以下几行:

rm -f /my/dir/11*
rm -f /my/dir/12*

(( etc ))

rm -f /my/dir/1*
rm -f /my/dir/2*
Run Code Online (Sandbox Code Playgroud)

我收到每一行的错误消息

line 1: /usr/bin/rm: Argument list too long
Run Code Online (Sandbox Code Playgroud)

我试图用

ls -d /my/dir/11* | xargs rm
Run Code Online (Sandbox Code Playgroud)

ls -d给了我同样的错误信息。

如何在不增加包含数百个文件名排列的列表的情况下删除这些文件?

Gab*_*uvé 7

如果您想获取相对路径并将其传递给rm,您可以使用该find命令,对于您的用例,我将运行:

find /my/dir -iname '[0-9]*' -type f
Run Code Online (Sandbox Code Playgroud)

这将返回以数字开头的每个文件。如果该列表是您要删除的内容,请find使用-delete以下命令删除它们:

find /my/dir -iname '[0-9]*' -type f -delete
Run Code Online (Sandbox Code Playgroud)

祝你好运!

  • 不打破 `rm` 子进程而是使用 `-delete` 会更快。 (2认同)