フォルダに触れることなくファイルに対する実行権限を再帰的に削除する方法は?

フォルダに触れることなくファイルに対する実行権限を再帰的に削除する方法は?

NTFSドライブをバックアップしましたが、このバックアップが必須であることがわかりました。しかし、NTFSドライブには混乱する権限があります。各ファイルを手動で復元する必要なく、正常に復元したいと思います。

1つの問題は、私のすべてのテキストファイルが突然実行権限を持っていたことです。これは間違ったことでした。だから私は次のことを試みます:

sudo chmod -R a-x folder\ with\ restored\ backup/

xただし、これはディレクトリの権限も削除して読み取ることができないため、間違っています。

この場合、正しいコマンドは何ですか?

答え1

すべてのフォルダの全員に実行権限を設定するには:

chmod -R -x+X -- 'folder with restored backup'

-xすべての実行権限を削除すると、すべての実行権限が追加されます
+Xただディレクトリ用。

バラよりStefan Chazerasの答え要求どおりに真のノタッチフォルダソリューションを探していますfind

答え2

まあ、私はMac OS X、BSD、Linux用の「chmod」のマニュアルページをもう一度読んでいくつかの実験をしました。シンボルパターンについて私が知っているのは次のとおりです。複雑になるかもしれませんが、理解する価値があります。

  • 一般的な形はお尻[,お尻… ]どこ:
  • お尻:= [ウゴア][+-=][rwxXstugo]
  • 【うごや】(WHO)(複数の指定)とは、ユーザー、グループ、その他、またはすべての権限を設定することを意味します.指定しない場合、デフォルトは「a」ですが、ウマスク実施中です。
  • [+-=](行動) (1 つを指定してください) は次のことを意味します.
    • + は、すでに有効な権限に指定された権限を追加することを意味します。
    • – すでに有効な権限から指定された権限を削除することを示します。
    • = は、指定された権限で権限を設定し、他のすべての権限を消去することを意味します。
  • [rwxXstugo](許可する) (rwxXstの倍数またはugoのいずれかを指定)は、指定されたユーザーの権限を次のように設定します.
    • r——読む
    • w - 書く
    • x — 実行/検索
    • X - ディレクトリまたは実行ビットが設定されている場合にのみ実行/検索します。
    • s — suid または sgid
    • T-難しい
    • u — ユーザー権限のコピー
    • g — グループ権限のコピー
    • o — 他の権限のコピー

たとえば、a+xファイルを誰でも実行できるようにします。a+Xファイルが誰でも実行できる場合は、誰でも実行できます。

a+x誰もがディレクトリを検索できるようになります。a+X誰もが検索できるディレクトリも作成されます。

BSDとLinuxの主な違いは、BSDがファイル権限に基づいて決定を下すことです。今後chmodが実行されます。 Linuxでは、+X句を実行する直前に決定が下されます。

したがって、BSDの場合、この組み合わせはa-x,a+X実行/検索権限を削除し、すべての人がディレクトリを検索できるようにし、すべての人がファイルを実行可能にします。もしもともとは誰でもできることでした。

Linuxの場合、a-x,a+X実行/検索権限が削除されると、誰もがディレクトリを検索できるようになり、ファイルは誰でも実行できます。


具体的な例は次のとおりです。BSDシステム:ディレクトリ、実行可能ファイル、および実行不可能ファイル:

drwxr-x---  2 falk  staff  68 Jul 19 18:01 fee/
-rwxr-x---  1 falk  staff   0 Jul 19 18:01 fie*
-rw-r-----  1 falk  staff   0 Jul 19 18:01 foe

ディレクトリと「fie」はどちらもユーザーが実行/検索できますが、他のユーザーは検索できません。

今実行しますchmod a-x,a+X *。最初のセクションはすべてのユーザーのすべてのファイルから実行/検索ビットを削除しますが、2番目のセクションでは「手数料」と「fie」にそれを追加します。 「fee」はディレクトリなので、「fie」は起動できる実行可能ビットが1つ以上あるためです。

drwxr-x--x  2 falk  staff  68 Jul 19 18:01 fee/
-rwxr-x--x  1 falk  staff   0 Jul 19 18:01 fie*
-rw-r-----  1 falk  staff   0 Jul 19 18:01 foe

私がそれを実行したとき、私は同じ結果を得ましたchmod -x+X

結論:Jak GibbのソリューションはLinuxで動作しますが、BSDの場合は2つのステップを実行する必要があります。

SVr4や他のUnixの亜種ではこれをテストしていません。

答え3

1つの方法は次のとおりです。

find backup -type f -exec chmod 0644 {} +

答え4

zsh では、次を使用します。グローバル予選 .通常のファイル(シンボリックリンクを除く)のみが一致し、Dドットファイルと一致します。

sudo chmod a-x folder\ with\ restored\ backup/**/*(D.)

コマンドラインが長すぎる場合は、次のものを使用できます。zargs:

zargs -- folder\ with\ restored\ backup/**/*(D.) -- sudo chmod a-x 

関連情報