我有一个 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
给了我同样的错误信息。
如何在不增加包含数百个文件名排列的列表的情况下删除这些文件?
如果您想获取相对路径并将其传递给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)
祝你好运!