web-dev-qa-db-ja.com

再帰的なChmod

私は他の誰かによってアーカイブされたアーカイブを持っています、そしてそれをダウンロードした後、自動的に読み取りアクセスを得るために抽出されたファイル内のファイルシステムのブランチを変更したいです。 (アーカイブの作成方法は変更できません).

私はこのスレッドを調べました: chmod:既に実行権限を持っているファイルにのみ実行権限を再帰的に追加する方法 他の人のように/しかし喜びはありません。

ディレクトリはもともと複数の、しかしすべて間違ったフラグを持って来ます、それらは以下のように見えるかもしれません:

drwx------
d---r-x---
drwxrwxr-x
dr--r-xr--

これらは私がこれまでに発見したほんの一部ですが、それ以上になる可能性があります。

findパーミッションなしでディレクトリを検索しようとするとxエラーが発生するため、chmodに渡しません。私がこれまで行ってきたことは、手動で親ディレクトリのパーミッションを変更してから、子ディレクトリに移動して同様にすることです。しかし、これは多くの手作業です。これを自動的に行う方法はありませんか?

すなわちどうやって今やっているの?

行う:

$ chmod -R +x
$ chmod -R +r

エラーが出なくなるまで

$ find -type f -exec chmod -x {} +

しかし、もっと良い方法があるはずです。

223
user797257

ディレクトリを一覧表示するには、実行アクセス権に加えて読み取りアクセス権が必要です。実行権限しかない場合は、ディレクトリ内のエントリの名前は調べられますが、他の情報は調べられません(型ではないため、どのエントリがサブディレクトリであるのかわかりません)。これは私のために働く:

find . -type d -exec chmod +rx {} \;
119
Fred Foo

ChmodをXモード文字(大文字のX)とともに使用して、ディレクトリに対してのみ実行可能フラグを設定できます。

以下の例では、実行可能フラグはクリアされ、その後すべてのディレクトリに再帰的に設定されます。

~$ mkdir foo
~$ mkdir foo/bar
~$ mkdir foo/baz
~$ touch foo/x
~$ touch foo/y

~$ chmod -R go-X foo 
~$ ls -l foo
total 8
drwxrw-r-- 2 wq wq 4096 Nov 14 15:31 bar
drwxrw-r-- 2 wq wq 4096 Nov 14 15:31 baz
-rw-rw-r-- 1 wq wq    0 Nov 14 15:31 x
-rw-rw-r-- 1 wq wq    0 Nov 14 15:31 y

~$ chmod -R go+X foo 
~$ ls -l foo
total 8
drwxrwxr-x 2 wq wq 4096 Nov 14 15:31 bar
drwxrwxr-x 2 wq wq 4096 Nov 14 15:31 baz
-rw-rw-r-- 1 wq wq    0 Nov 14 15:31 x
-rw-rw-r-- 1 wq wq    0 Nov 14 15:31 y

ちょっとした説明:

  • chmod -x foo - fooeXecutableフラグをクリアする
  • chmod +x foo - fooeXecutableフラグを設定する
  • chmod go+x foo - 上と同じですが、GroupおよびOtherユーザーに対してのみフラグを設定し、User(所有者)パーミッションには触れないでください
  • chmod go+X foo - 上記と同じですが、ディレクトリにのみ適用され、ファイルには適用されません
  • chmod -R go+X foo - 上と同じですが、fooのすべてのサブディレクトリに対してRecursivelyを繰り返してください。
161

すべてのアクセス許可を同時に変更してみてください。

chmod -R +xr
78
choroba

所有者がすべて書き込み可能にするには、グループ単位で読み取り/実行可能にして、世界で実行可能にします。

chmod -R 0755

すべてを広く公開するには:

chmod -R 0777
46
Tim Jensen

現在のフォルダ内のすべてのファイル(フォルダではない)に、実行可能権限 再帰的に を追加し、拡張子shを付けます。

find . -name '*.sh' -type f | xargs chmod +x

* パイプ(|)に注意してください

13

現在のパスから始まるすべてのファイルとディレクトリに0777を指定します。

chmod -R 0777 ./

0
Anthony Vinay