253

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

私はこのスレッドを調べました: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 {} +

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

4

6 に答える 6

179

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

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

~$ 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
  • chmod +x foo-実行可能フラグをに設定ますfoo
  • chmod go+x foo-上記と同じですが、グループおよびその他のユーザーにのみフラグを設定し、ユーザー(所有者)の権限に触れないでください
  • chmod go+X foo-上記と同じですが、ディレクトリにのみ適用され、ファイルには触れないでください
  • chmod -R go+X foo-上記と同じですが、のすべてのサブディレクトリに対して再帰的にこれを実行しますfoo
于 2012-11-14T11:36:26.057 に答える
131

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

find . -type d -exec chmod +rx {} \;
于 2012-11-14T11:23:20.183 に答える
82

すべての権限を同時に変更してみてください。

chmod -R +xr
于 2012-11-14T11:20:11.187 に答える
51

所有者がすべてを書き込み可能にし、グループが読み取り/実行し、ワールドで実行可能にするには、次のようにします。

chmod -R 0755

すべてを広く開くには:

chmod -R 0777
于 2015-03-02T07:07:43.557 に答える
18

拡張子が次の現在のフォルダー内のすべてのファイル(フォルダーではない)に実行可能アクセス許可を再帰的に追加します。sh

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

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

于 2016-07-14T07:50:16.203 に答える
3

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

chmod -R 0777 ./

于 2019-02-01T13:22:27.547 に答える