いくつかの無数が実行されましたchown -R username
。私たちのWebサーバーの/ homeフォルダーで、彼は目的のフォルダーにいると思っていました。言うまでもなく、サーバーは多くのウォベリーを投げています。
200を超えるWebサイトがあり、それらすべてを個別にchownしたくないので、すべてのフォルダーの所有者を末尾の/なしでフォルダー名に変更するスクリプトを作成しようとしています。
これまでのところ、/を削除できれば問題ありませんが、ファイルに。が含まれているかどうかも確認したいと思います。その中で、それがコマンドを実行しない場合は、次のコマンドに進みます。
#!/bin/bash
for f in *
do
test=$f;
#manipluate the test variable
chown -R $test $f
done
どんな助けでも素晴らしいです!
前もって感謝します!
/ home /ディレクトリー内のallフォルダーがユーザー名を表すと想定すると、以下を使用できます。
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
この結果を既存のホームディレクトリと照合することは、読者の課題です。
basename コマンドを使用して、パスの最後のコンポーネントを指定できます
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
それが正気だったことを確認します。