Bash脚本来修复目录和文件的所有权

我的客户让我将一些文件夹部署到他的客户网站的一些主目录中。 我用一个Bash脚本做了这个,但是最后它使用了root帐户的权限

如何制作一个Bash脚本,将每个文件夹放在/ home / user (不是隐藏的文件或文件夹)下,获取该文件夹的用户和组的所有权,然后执行chown -R {user}。{group} / home / 用户

这些服务器正在运行CentOS Linux。

我想你所问的方式是倒退的。 你不想把每个文件夹,然后find用户,而你想带走用户,并find他们的主文件夹。

#!/bin/bash while IFS=':' read -r login pass uid gid uname homedir comment; do echo chown $uid:$gid "$homedir"; done < /etc/passwd 

您将需要删除当然回声,您将需要以root权限运行此。 我也总是推荐一个while循环,而不是一个循环遍历自己。 你可以通过/etc/passwd保存这个循环。

我必须给凯尔·布兰特以上完整的信贷。 所以,如果你喜欢这个答案,请点击post上方的三angular形来解除他的状态。

不过,我改善了自己的日常工作,觉得有责任把它张贴在这里,并把它作为最终的答案。

所有我join凯尔的例行公事,都是确保我们只触摸家庭的目标,因此在星号里面就是一条线。 然后,我确保这个家庭实际上仍然存在。 之后,我做了这个chown声明。 就像凯尔所说 – 删除“回声”关键字,它将实际上执行任务。 然后,我在chown上加了“-R”,以便recursion地工作,以防问题可能会深入到你的主目录。

 #!/bin/bash while IFS=':' read -r login pass uid gid uname homedir comment; do if [[ "$homedir" = **/home/** ]]; then if [ -d "$homedir" ]; then echo chown -R $uid:$gid "$homedir"; fi fi done < /etc/passwd 
 #!/bin/bash for f in $( ls /home/ ); do chown -R $f:yourgroup /home/$f done 

在这里没有理智的检查,我没有任何testing,所以要小心。

(顺便说一句,“没有隐藏的文件或文件夹”的要求将会得到满足,因为在Unix中的隐藏文件只是一个普通的文件,在。之前,并且.username不会成为chown的有效用户)。

这可能有帮助

  #!/bin/bash for file in `ls -a | grep -v '^\.'` do if [[ -d $file ]] then fowner=`ls -ld $file | nawk '{print $3}'` fgroup=`ls -ld $file | nawk '{print $4}'` chown -R $fowner:$fgroup $file fi done 

使用getent获取用户ID大于或等于500的每个用户的用户名,组名和主目录,并通过chown -R应用它们。 另外,现在是user:group

因为我在ls -l /home/ | awk '{print $3}' ls -l /home/ | awk '{print $3}' ;做chown -R $ i / home / $ i;完成
因为我在ls -l /home/ | awk '{print $4}' ls -l /home/ | awk '{print $4}' ;执行chgrp -R $ i / home / $ i;完成