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

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

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

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

(( etc ))

rm -f /my/dir/1*
rm -f /my/dir/2*

我收到每一行的错误消息

line 1: /usr/bin/rm: Argument list too long

我尝试用以下内容替换这些行

ls -d /my/dir/11* | xargs rm

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

如何删除这些文件而不增加列表以包含数百个文件名排列?

答案1

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

find /my/dir -iname '[0-9]*' -type f

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

find /my/dir -iname '[0-9]*' -type f -delete

祝你好运!

答案2

如果您的 shell 有内置printf命令(例如 Bash 或 Dash),它可能接受更长的参数列表,您可以通过管道传输到xargs

printf '%s\0' /path/to/glob* | xargs -0 rm -f

相关内容