为每个换行符分隔执行命令

为每个换行符分隔执行命令

我有这个:

 chmod u+x $(find scripts -name "*.sh")

但我相信它只对 find 列表中的第一项运行 chmod u+x ,因为结果是换行符分隔的。

如何对 find 调用返回的每个项目运行 chmod u+x ?

我的猜测是 xargs 是最好的方法?像这样的东西:

 find scripts -name "*.sh" | xargs chmod u+x

答案1

最安全的方法是直接find执行chmod,并且在选择文件时要更加小心:

find scripts -type f -name '*.sh' -exec chmod u+x {} +

这将找到目录中或scripts目录下名称以 结尾的所有常规文件.sh,并将chmod u+x同时在尽可能多的文件上运行。它将毫无问题地处理可能奇怪的文件名。

要仅更改需要它的文件的权限:

find scripts -type f -name '*.sh' ! -perm -u+x -exec chmod u+x {} +

相关内容