从目录中删除数百万个文件的命令

M.K*_*.K. 0 rm files

我有一个目录,其中包含数百万个小文件(来自大数据程序的输出)。我需要删除这些目录,但是当我输入标准时,rm *我得到:

zsh: sure you want to delete more than 100 files in data/output [yn]? y
zsh: argument list too long: rm
Run Code Online (Sandbox Code Playgroud)

这些文件都具有相同的前缀,并像这样在后面附加一个唯一的数字

data-12343
data-12344
... etc
Run Code Online (Sandbox Code Playgroud)

所以我什至不能使用正则表达式以零碎的方式垃圾文件。寻求有关如何以自动化方式高效执行此操作的建议和技巧。

谢谢。

Jef*_*eff 5

使用xargs运行你的rm命令。它将重新运行rm,每次用完最大数量的参数,直到完成您的初衷*

用手册页的话来说:

命令的命令行会一直建立,直到达到系统定义的限制(除非使用 -n 和 -L 选项)。将根据需要多次调用指定的命令以用完输入项列表。一般而言,命令调用次数将比输入中的项目少得多。这通常会带来显着的性能优势。一些命令也可以并行执行;请参阅 -P 选项。

  • @MK虽然在这种情况下有效,但您不应该依赖`ls`的输出来处理这样的事情:更好的选择是`printf'./%s\0' * | xargs -0 rm`。请参考【为什么你不应该解析 ls(1) 的输出】(https://mywiki.wooledge.org/ParsingLs) (3认同)
  • 我很高兴它对你有用。与@steeldriver 的评论类似,另一种选择是使用 `find` 并将结果通过管道传送到 `xargs`,如下所示:`find。-type f -print0 | xargs -0 rm` (2认同)