我有一个目录 /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