Chmodを再帰的に


249

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

私はこのスレッドを調べました:chmod:実行権限をすでに持っているファイルにのみ再実行権限を再帰的に追加する方法

ディレクトリには元々複数のフラグがありますが、すべて間違ったフラグで、次のように表示されます。

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

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

findx権限のないディレクトリを検索しようとするとエラーが発生するため、に渡されませんchmod。私がこれまで行ってきたことは、親ディレクトリの権限を手動で変更してから、子ディレクトリに移動して、それらに対して同じことを行うことです。しかし、これは多くの手作業です。これを自動的に行う方法はありませんか?

すなわち、私は今それをやっている方法:

行う:

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

エラーが出なくなるまで

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

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


3
-rは-Rと同じではありません
PJ Brunet 2014年

その他のノート、あなたはすべてのグループの権限は、所有者の権限を一致させると言いたい場合(IMOアップFUGのすべてに可能性が低いと思われるが)に完全に可能thatsのserverfault.com/a/284478/210994
ThorSummoner

回答:


131

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

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

2
違いは何ですか '\;' そして、コマンドの最後にOPによって使用された「+」?
kon psych 2014年

1
@konpsychはどうやら+コマンドラインを別の方法で構築しています。私は実際にはそれを意識していませんでした。\;通常の方法で、検索に一致するファイルごとに1つのコマンドを使用します。
Fred Foo

一部のファイルの名前にスペースが含まれていると機能しません
Soonts

3
@Soontsその後、"{}"代わりに{}修正する必要があります。
user4642212

私はこれをWindows 10のLinuxサブシステムで実行しましたが、逆の効果がありました。ほとんどのファイル権限が削除されました。
Max Candocia

176

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

80

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

chmod -R +xr

これにより、すべての非ディレクトリにも実行権限が付与されます。
Fred Foo、

1
はい。これは、最初の反復ステップを置き換えるだけです。あなたはまだfind -type f -exec chmod -x {} +後で実行する必要があります。
チョロバ2012年

50

所有者による書き込み、グループによる読み取り/実行、および全実行可能ファイルを作成するには、次のようにします。

chmod -R 0755

すべてを大きく開くには:

chmod -R 0777

12
現在のフォルダの場所を追加しますchmod -R 0777 .
Danijel

18

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

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

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


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.