脚本在所有文件夹上运行chown并将所有者设置为文件夹名称减去结尾/

一些numpty运行chown -R username 。 在我们的networking服务器上的/ home文件夹,认为他在所需的文件夹。 不用说服务器扔了很多wobbelys。

我们有超过200个网站,我不想单独将它们全部播放出来,所以我正在尝试制作一个脚本,将所有文件夹的所有者更改为文件夹名称,而不会跟踪/。

这是我迄今为止,一旦我可以删除/它会没事的,但我也想检查文件是否包含一个。 在里面,如果没有,那么运行命令,否则进入下一个。

 #!/bin/bash for f in * do test=$f; #manipluate the test variable chown -R $test $f done 

任何帮助将是伟大的!

提前致谢!

假设/ home /目录中的所有文件夹代表用户名,则可以使用:

 for dir in /home/*/; do # strip trailing slash homedir="${dir%/}" # strip all chars up to and including the last slash username="${homedir##*/}" case $username in *.*) continue ;; # skip name with a dot in it esac chown -R "$username" "$dir" done 

我build议之前运行一个testing循环,检查用户名是否真正匹配一个主目录。

这个AWK命令检索给定用户的主目录。

 awk -F: -v user="$username" '{if($1 == user){print $6}}' < /etc/passwd 

根据现有的家庭目录检查这个结果是读者的一个练习。

您可以使用basename命令来提供path的最后一个组件

 for dir in /home/* do if [ -d "$dir" ] then username=$(basename "$dir") chown -R "$username" "$dir" fi done 

虽然我会最初运行它

 for dir in /home/* do if [ -d "$dir" ] then username=$(basename "$dir") echo "chown -R $username $dir" fi done 

确保它是理智的。