有效地从大型目录中的文件中删除 x 位

有效地从大型目录中的文件中删除 x 位

我有一个目录 /some/dir,其中包含数百万个文件和目录。我需要删除所有文件的 X 位,但不需要删除目录中的 X 位。

以下工作:

find /some/dir -type f -chmod -x {} \;

但我相信它会为每个文件生成一个“chmod”进程。这也许可以解释为什么它会运行很长时间。

有没有更有效的方法来做到这一点?

答案1

此外xargs,正如 Ljm Dullaart 提到的,您可以使用:

find /some/dir -type f -exec chmod -x {} +

作为一个调试技巧,你可以使用以下命令查看生成的命令:

find /some/dir -type f -exec echo chmod -x {} +

来自手册页查找(1)命令:

-exec command {} +
-exec操作的变体对选定的文件运行指定的命令,但命令行是通过将每个选定的文件名附加在末尾来构建的;命令的总调用次数将比匹配的文件数少得多。命令行的构建方式与 xargs 构建其命令行的方式大致相同。{}命令中只允许出现一个 ,并且它必须出现在末尾,紧接在 之前+;它需要进行转义(使用\)或放在引号中以防止被 shell 解释。该命令在起始目录中执行。如果任何具有 形式的调用+返回非零值作为退出状态,则 find 返回非零退出状态。如果 find 遇到错误,有时会导致立即退出,因此某些待处理的命令可能根本不会运行。因此-exec my-command ... {} + -quit可能不会导致 my-command 实际运行。 的此变体-exec始终返回 true。

答案2

用于xargs限制产卵:

find /path/to/base/dir -type f -print0 | xargs -0 chmod -x

相关内容