再帰的なchmod:ファイルのrw、ディレクトリのrwx


28

chmodたくさんのファイルとディレクトリが欲しい。xディレクトリのリストを示し、私は適用したいのですが、通常のファイルに対して実行rwファイル用およびrwxディレクトリの。chmodコマンドのみを使用することは可能ですか?

そうでない場合、最も便利な方法は何ですか?

実行すると、chmod -R 770私は通常のファイルが実行可能になることを望んでいないとして可能性はありません。


1
ファイルとディレクトリのパブリック書き込み許可が本当に必要ですか?つまり、どのファイルを破壊するのかは気にしませんか?
ジョナサンレフラー

本当です。上記で変更しました。
削除

回答:


19

これは、たった1つのfindコマンドを使用して行います。glyいが効果的。

find /p/a/t/h \( -type d -exec chmod 755 {} \; \) -o \( -type f -exec chmod 644 {} \; \)

パスにスペースが含まれる場合に備えて、「{}」を引用符で囲む必要はありませんか?いいねfind . -type d -exec chmod -vc 755 "{}" \;-vcフィードバックを含む)。(そして、たぶん、明確にするために、2つのスタンドアロンコマンドも答えに追加しますか?)
Arjan

いいえ、{}は引用符で囲む必要はありません(完全に確実になるようにテストしました)。findがコマンドに{}を挿入すると、適切にエスケープされます。findの内部動作を調べていませんが、exec()に渡す引数配列を作成し、ファイル名を配列にstrcpy()すると仮定します。chmodが引数を見ると、正しく表示されます。
baumgart

37

manページからX許可を使用します。

ファイルがディレクトリであるか、実行/検索ビットのいずれかが元の(変更されていない)モードに設定されている場合、実行/検索ビット。permシンボル「X」を使用した操作は、opシンボル「+」と組み合わせた場合にのみ意味があり、その他の場合はすべて無視されます。

以下を実行します。

chmod -R a-x [directory]
chmod -R a+rwX [directory]

これにより、すべてのファイルとディレクトリから実行ビットが削除され、すべてに読み取りおよび書き込み権限が追加され、ディレクトリのみに実行権限が追加されます。(最初のステップで実行ビットがオンになっている通常のファイルはありません。)


1
これにより、通常のファイルでモード666が強制されることはありません。通常のファイルが既に設定されている場合、通常のファイルの実行可能ビットはクリアされません。
いんちきのキホーテ2009年

だから、その場合、あなたはchmod -R a-x [directory]後に続くことができますchmod -R a+rwX [directory]か?
jwaddell

@jwaddel:それはうまくいくはずです。その後、すでに上で実行ビット持っている唯一のディレクトリと通常のファイルに実行加えることに関係なく、ファイル/ディレクトリ型で、すべてのビットを実行削除している(現在は何もありません。)
ベン・S

するとa-x、ディレクトリにアクセスできなくなります。実際、chmodは許可を拒否して失敗し、ディレクトリ内のファイルから実行可能ビットを削除しません。ルートにならずにこれを行う方法はありますか?
avakar

14

以下findと一緒に使用することもできますxargs

find . -type f -print0 | xargs -0 chmod 666
find . -type d -print0 | xargs -0 chmod 777

どこ-typeを指定し日間 irectoryまたはF ILEを。


1
xargsには長さの制限はありませんか?それは、たくさんのファイルとディレクトリです。
削除

2
最初にディレクトリを作成し、次にファイルを作成します。そうしないと、許可がないためにサブツリーを見逃す危険があります。また、リストがchmodの前または後にスカウトされているかどうかを確認する必要があります。それ以外は上記と同じです。そして、はい、xargsの使用は控えます。
ステファノボリーニ

1
xargs長いコマンドラインを複数の実行に分割するのに十分スマートです。xargsのマンページを参照して、必ず確認してくださいxargs --show-limits
マイク14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.