ディレクトリ内のすべてのファイルの権限を変更するスクリプトを作成しました。
#!/bin/bash
files=`find "$1"`
for f in $files; do
chown "$2" "$f"
chmod 600 "$2"
done
当然、chmodの2番目の引数を"$f"
代わりに使用する必要があります"$2"
。しかし、(小さなディレクトリで)スクリプトを実行するときに2番目のパラメータも含めることを忘れていました"dave:dave"
。これで、ディレクトリ内のすべてのファイルが完全に混乱しました。
~ $ ll Documents/
ls: cannot access Documents/wiki.txt: Permission denied
ls: cannot access Documents/todo.txt: Permission denied
ls: cannot access Documents/modules.txt: Permission denied
ls: cannot access Documents/packages.txt: Permission denied
total 0
-????????? ? ? ? ? ? modules.txt
-????????? ? ? ? ? ? packages.txt
-????????? ? ? ? ? ? todo.txt
-????????? ? ? ? ? ? wiki.txt
実行するとエラーは発生しsudo chown dave:dave Documents/*
ませんsudo chmod 600 Documents/*
が、ファイルは変更されていません。私は各ファイルを新しいファイルに入れることができることを知っていますが、sudo cat
元のファイルの権限を変更する方法は疑問に思います。
ベストアンサー1
コメントに与えられた答えに加えて、スペースを含むファイル名でスクリプトが中断されることに注意してください。
find
出力からファイル名のリストを解析するのではなく、単一のコマンドでこれらすべてを実行できますfind
。特殊文字やスペースに関係なくファイル名を処理することがより強力になりました。
find "$1" -type f -exec chown "$2" {} \; -exec chmod 600 {} \;
chown
特定のファイルで失敗すると、chmod
そのファイルでは実行されません。とにかく、これはおそらくあなたが望む動作です。
Documentsディレクトリから実行権限を削除する無効なコマンドを実行したため、実行権限を再度追加する必要があります。
chmod u+x Documents
誤って実行権限が削除されたディレクトリがさらにある場合は、次の方法で問題を解決できます。
find Documents -type d -exec chmod u+x {} \;
しかし、これが必要だとは思わない。ドキュメントから実行権限を削除すると、すべてのサブディレクトリにアクセスできなくなり、実行権限がドキュメントから削除されないためです。