我想chmod 555
使用以下命令对获得的所有文件和目录执行(它返回目录 test 及其中的所有文件和目录):
find ~/.config/google-chrome -type d -name test -exec find {} \;
答案1
在这种情况下,您可以chmod -R
按照用户26112的回答,但在一般情况下,你可以这样做:
find ~/.config/google-chrome -type d -name test -exec sh -c '
for i do
find "$i" -exec chmod 555 {\} +
done' sh {} +
技巧是使用 shell 并使用引用(如{\}
或{"}"
),以便内部{}
不会被外部扩展find
(考虑到即使它只是参数的一部分,find
那些实现仍然会扩展)。{}
GNU find
4.9.0 或更高版本还支持从 stdin 获取要处理的文件列表作为 NUL 分隔记录,因此您可以执行以下操作:
find -files0-from <(
find ~/.config/google-chrome -type d -name test -print0
) -exec chmod 555 {} +
对于旧版本,您可以使用 GNU 执行类似的操作xargs
并sh
重新排序参数:
xargs -r0a <(
find ~/.config/google-chrome -type d -name test -print0
) sh -c 'exec find "$@" -exec chmod 555 {} +' sh
(<(...)
是流程替代,zsh 和 bash 也支持的 ksh 功能,不要与yash
's混淆进程重定向)。
答案2
您可以使用chmod
的-R
标志来更改目录以及其下层次结构中的所有文件和目录的权限。
find ~/.config/google-chrome -type d -name test -exec chmod -R 555 '{}' \;
答案3
如果您确实想要两个find -exec
,请尝试以下操作
find /etc -type f -exec sh -c 'find "$0" -exec echo {\} \;' {} \;
(这将传递给echo
命令find
找到的内容)
find /etc -type d -exec sh -c 'find "$0" -type f -exec echo "$0" {\} \;' {} \;
(一些有用的示例:打印目录名称和其中的文件列表)
通过使用,sh -c
您还可以解决find -exec
子句中管道的问题,还要注意传递的参数将从而不是像 shell 脚本通常那样sh -c
从开始。$0
$1
答案4
您也可以运行此命令。它将在每个目录上运行,但+
参数find
将运行chmod
作为参数传递的多个“测试”目录:
$ find ~/.config/google-chrome -type d -name test -exec chmod -R 555 '{}' +