【发布时间】:2017-05-06 01:07:09
【问题描述】:
我需要使某些文件夹/文件(递归)具有与用户相同的权限。所以:
- 0755 -> 0777
- 0644 -> 0666
我该怎么做?也许是我知道的一个小秘密命令?
如果没有简单的方法,那么也许我需要创建一个循环并测试/分配。最终我只需要处理 3 种类型:
文件夹应为 777,大多数文件应为 666,可执行文件应为 777。
【问题讨论】:
我需要使某些文件夹/文件(递归)具有与用户相同的权限。所以:
我该怎么做?也许是我知道的一个小秘密命令?
如果没有简单的方法,那么也许我需要创建一个循环并测试/分配。最终我只需要处理 3 种类型:
文件夹应为 777,大多数文件应为 666,可执行文件应为 777。
【问题讨论】:
没有适合你的命令。你确实需要一个小循环:
for file in $(find . -print)
do
if [ -d $file -o -x $file ]; then
chmod 777 $file
else
chmod 666 $file
fi
done
【讨论】:
for file in $(find . -print)的一般做法,请参见BashPitfalls #1和DontReadLinesWithFor。
find 的任意文件名,您需要使用 -exec 操作将它们传递给您的脚本argv 或 -print0 生成 NUL 分隔的流。在 BashFAQ #1 中搜索 -print0 以获取后者的示例,或在 UsingFind 的“复杂操作”部分中搜索两者。
[ ] 中的 -o 已弃用。请参阅the POSIX standard for test,并注意-a 和-o 规范中的[OB](“过时”)符号。
find 可以查找具有给定权限集的文件,并运行尽可能少的 chmod 调用来覆盖它们。
find . \
'(' -perm -0700 -exec chmod 0777 '{}' + ')' -o \
'(' -perm -0600 -exec chmod 0666 '{}' + ')'
【讨论】: