一些 numptychown -R username
在我们的网络服务器上的 /home 文件夹中运行 . ,以为他位于所需的文件夹中。不用说,服务器正在抛出很多不稳定因素。
我们有 200 多个网站,我不想单独更改它们的所有者,因此我尝试编写一个脚本,将所有文件夹的所有者更改为文件夹名称,而不带尾随的 /。
这是我目前拥有的全部,一旦我可以删除 / 就没问题了,但我还想检查文件是否包含 .,如果不包含,则运行该命令,否则转到下一个。
#!/bin/bash
for f in *
do
test=$f;
#manipluate the test variable
chown -R $test $f
done
任何帮助都将非常有帮助!
提前致谢!
答案1
假如说全部/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
我建议先运行一个测试循环,检查用户名是否真的与主目录匹配。
此 AWK 命令检索给定用户的主目录。
awk -F: -v user="$username" '{if($1 == user){print $6}}' < /etc/passwd
根据现有的主目录检查这个结果对于读者来说是一项练习。
答案2
您可以使用基名命令提供路径的最后一个部分
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
以确保它是合理的。