gpt4 book ai didi

linux - linux下如何使组内文件的权限与属主相同?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:35:28 24 4
gpt4 key购买 nike

如何递归更改文件/目录的权限,使其成为与所有者权限相同的组权限?

例如之前:

640 x.txt
744 y
400 y/z.txt

之后:

660 x.txt
774 y
440 y/z.txt

感谢 fedorqui 创建了这个作为答案:

find . -name '*' -print0 | xargs -0 bash -c 'for file; do 
perm=$(stat -c '%a' "$file")
new_perm=$(sed -r "s/^(.)./\1\1/" <<< "$perm")
chmod "$new_perm" "$file";
done'

最佳答案

使用stat您可以获得文件的权限。

例如:

$ touch a
$ stat -c '%a' a
644

然后,如果我们捕获到这个值,我们可以使用 sed 使第二个字段与第一个字段具有相同的值:

$ sed -r "s/^(.)./\1\1/" <<< "644"
664

然后我们准备说

chmod 664 file

现在我们有了所有的部分,看看我们如何将它们粘合在一起。这个想法是捕捉 stat 输出的第一个字符以生成新值:

perm=$(stat -c '%a' file)
new_perm=$(sed -r "s/^(.)./\1\1/" <<< "$perm")
chmod "$new_perm" file

然后,循环遍历文件并执行以下操作:

for file in pattern/*; do
perm=$(stat -c '%a' "$file")
new_perm=$(sed -r "s/^(.)./\1\1/" <<< "$perm")
chmod "$new_perm" "$file"
done

如果您希望它由您在评论和更新的问题中指出的find 结果提供,您可以使用 process substitution :

while IFS= read -r file; do
perm=$(stat -c '%a' "$file")
new_perm=$(sed -r "s/^(.)./\1\1/" <<< "$perm")
chmod "$new_perm" "$file";
done < <(find . -name '*' -print0)

关于linux - linux下如何使组内文件的权限与属主相同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33999971/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com