如何使组的linux上的文件的权限与所有者相同?

如何使组的linux上的文件的权限与所有者相同?,linux,bash,shell,file,file-permissions,Linux,Bash,Shell,File,File Permissions,如何将文件/目录的权限递归更改为与所有者权限相同的组权限 e、 g。 之前: 之后: 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

如何将文件/目录的权限递归更改为与所有者权限相同的组权限

e、 g。 之前:

之后:

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'
find-文件名为“*”-print0 | xargs-0bash-c”;做
perm=$(stat-c“%a'”$文件)

new_perm=$(sed-r“s/^(.)。/\1\1/”使用
stat
可以获得文件的权限

例如:

$ touch a
$ stat -c '%a' a
644
然后,如果我们捕捉到这个值,我们可以使用
sed
使第二个字段的值与第一个字段的值相同:

$ sed -r "s/^(.)./\1\1/" <<< "644"
664
现在我们有了所有的片段,看看如何将它们粘合在一起。想法是捕捉
stat
输出的第一个字符以生成新值:

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

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

例如:

$ touch a
$ stat -c '%a' a
644
然后,如果我们捕捉到这个值,我们可以使用
sed
使第二个字段的值与第一个字段的值相同:

$ sed -r "s/^(.)./\1\1/" <<< "644"
664
现在我们有了所有的片段,看看如何将它们粘合在一起。想法是捕捉
stat
输出的第一个字符以生成新值:

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

谢谢,唯一缺少的部分是递归性:-)@wdk有一个漂亮的
for
循环,如果您处于两个级别,它可以实现这一点。否则,如果这包含更多级别,您可以通过过程替换使用
find
。@wdk使用
find
方法更新,因为您在更新的问题中使用它的方式有点过分。谢谢,唯一缺少的部分是递归性:-)@wdk有一个漂亮的
for
循环,如果您处于两个级别,它可以实现这一点。否则,如果这包含更多级别,您可以通过流程替换使用
find
。@wdk使用
find
方法更新,因为您在更新的问题中使用它的方式有点过分。如果您总是想保持用户和组权限相同,一个有用的开始是更改您的umask:
umask 002
如果您始终希望保持用户和组权限相同,一个有用的开始是更改您的umask:
umask 002
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)