以下是您的工具包的更多选项。如果您只有一个命令可以在文件/目录组上执行,find
可以直接执行:
find . -type d -exec chmod 755 {} +
如果该命令一次只能处理一个文件/目录,请使用\;
而不是+
为每个项目运行一次:
find . -type d -exec chmod 755 {} \;
如果你需要做一些复杂的事情(即几个命令),你可以制作一个安全版本的循环:
while IFS= read -r -u3 -d $'\0' dir; do
sudo chown gkudelis "$dir"
chmod 755 "$dir"
touch "$dir/.perms_reset"
done 3< <(find /tmp -type f -print0)
请注意,这使用来自进程替换 ( <(...)
) 而不是管道的重定向,以避免在子 shell 中运行循环;这是一个仅限 bash 的功能,因此您必须使用 启动脚本#!/bin/bash
,而不是#!/bin/sh
. 此外,它重定向到 fd 3 而不是 stdin,因此如果循环内的任何内容尝试从 stdin 读取,它不会混淆。此外,请务必在对循环变量("$dir"
在本例中)的所有引用周围使用双引号来保护其中的空格。有关更多详细信息,请参阅BashFAQ #020。