私は他の誰かによってアーカイブされたアーカイブを持っています、そしてそれをダウンロードした後、自動的に読み取りアクセスを得るために抽出されたファイル内のファイルシステムのブランチを変更したいです。 (アーカイブの作成方法は変更できません).
私はこのスレッドを調べました: 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 {} +
しかし、もっと良い方法があるはずです。
ディレクトリを一覧表示するには、実行アクセス権に加えて読み取りアクセス権が必要です。実行権限しかない場合は、ディレクトリ内のエントリの名前は調べられますが、他の情報は調べられません(型ではないため、どのエントリがサブディレクトリであるのかわかりません)。これは私のために働く:
find . -type d -exec chmod +rx {} \;
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
- foo
のeXecutableフラグをクリアするchmod +x foo
- foo
のeXecutableフラグを設定するchmod go+x foo
- 上と同じですが、GroupおよびOtherユーザーに対してのみフラグを設定し、User(所有者)パーミッションには触れないでくださいchmod go+X foo
- 上記と同じですが、ディレクトリにのみ適用され、ファイルには適用されませんchmod -R go+X foo
- 上と同じですが、foo
のすべてのサブディレクトリに対してRecursivelyを繰り返してください。すべてのアクセス許可を同時に変更してみてください。
chmod -R +xr
所有者がすべて書き込み可能にするには、グループ単位で読み取り/実行可能にして、世界で実行可能にします。
chmod -R 0755
すべてを広く公開するには:
chmod -R 0777
現在のフォルダ内のすべてのファイル(フォルダではない)に、実行可能権限 再帰的に を追加し、拡張子sh
を付けます。
find . -name '*.sh' -type f | xargs chmod +x
現在のパスから始まるすべてのファイルとディレクトリに0777を指定します。
chmod -R 0777 ./