2

~/Documents フォルダー内のファイルのすべてのアクセス許可を変更しようとしていますが、次の小さなループが機能すると思っていましたが、機能していないようです。誰でも私を助けることができますか?ループは次のとおりです。

files=~/Documents/*
for $file in $files {
   chmod 755 $file }

これを bash コマンドラインに直接書き込もうとすると、次のエラーが表示されます。

-bash: syntax error near unexpected token `chmod'

あなたの助け/アドバイスをありがとう

4

4 に答える 4

5

ドキュメントを実行可能にすることにはリスクがあります。自分が何をしているのかを正確に理解していない限り、それをお勧めしません。

すべての Documents フォルダーを実行可能にしたいわけではなく、そのフォルダー内のすべてのファイルに対して、ユーザーが書き込み可能な他のすべてのユーザーが読み取り可能なアクセス許可を標準化することを、あなたは本当に望んでいないと思います。 .

(誰かが別の回答で述べたように)chmodコマンドには独自の「再帰的」オプションがあることに注意してください-R. chmod で「シンボリック」パーミッションを使用できることにも注意してください。そう:

chmod -R go+r-wx ~/Documents/

は、 内および下にあるすべてのものから Read および Write および eXecute 関数を追加および削除し~/Documents/ます。

これにより、サブディレクトリが読み取り可能になりますが、サブディレクトリ内のファイルへのアクセスは提供されないことに注意してください (これは、ディレクトリの実行可能ビットが行うことだからです)。したがって、次の 2 つのコマンドを使用することをお勧めします。

find ~/Documents/ -type d -exec chmod 755 {} \;
find ~/Documents/ -type f -exec chmod 644 {} \;

最初の行はchmodディレクトリでのみ実行されるため、読み取りとアクセスの両方が可能になります。2 行目はあなたのファイルだけに影響を与え、世界中の人が読めるようにします。

于 2012-07-14T19:26:32.677 に答える
3

試す

find . -exec chmod 755 {} +\;

また

find . -type f -exec chmod 755 {} +\;
于 2012-07-14T18:27:21.997 に答える
2

ループは次のようになります:

for file in $files
do
   test -f "$file" && chmod 755 "$file"
done  

下のディレクトリも含めると言うときは、グロブに依存していることに注意してください。したがって、ループを使用すると、ディレクトリのアクセス許可も変更されます。簡単なテストを追加して、ファイルのアクセス許可のみを更新することを確認できます。また、グロブをオフにすることができることに注意してください。その場合、ファイル名ではない可能性のある値になります。これもあなたの目的には役立ちません。 files=~/Documents/*~/Documentsset -ffiles<HOME_DIR>/*

さらに重要なことに、コメントでghotiが指摘しているように、グロブに依存することはお勧めできません。ハイフンを使用したファイル名のグロブを使用すると、未定義の動作が発生する可能性があり、セミコロンを使用したファイル名はセキュリティの脆弱性を引き起こす可能性があります。グロブに関連するセキュリティの脆弱性とは別に、それに関連するいくつかの 一般的な 落とし穴もあります。現在の運用に伴うリスクのいくつかを強調する、ghotiが提供する回答をご覧ください。

find同様に使用することもできます(これはすべてのファイルに対して再帰的に設定されます):
find ~/Documents/ -type f -exec chmod 755 {} \;
下のファイルに対してのみアクセス許可を設定するために、次のようなオプション~/Documents/を使用できます。-maxdepth
find ~/Documents/ -maxdepth 1 -type f -exec chmod 755 {} \;

お役に立てれば!

于 2012-07-14T18:26:06.643 に答える
1

なぜだめですか:

chmod -R 755 ~/Documents
于 2012-07-14T18:41:37.517 に答える