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


40

NTFSドライブにバックアップを作成しましたが、このバックアップが本当に必要であることがわかりました。ただし、NTFSドライブはアクセス許可を台無しにしました。各ファイルを手動で修正せずに通常の状態に復元したいと思います。

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

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

ただしx、ディレクトリから権限も削除されるため、ディレクトリが読めなくなるため、間違っています。

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


1
Meta:UnixシステムがDOSまたはWindowsファイルシステムからマウントされたファイルに実行ビットを追加する理由を理解したことがありません。誰もがそれらのファイルを実行するようなものではありません。実用的な場合は、通常、マウントオプションに「noexec」を追加します。
エドワードフォーク

回答:


68
chmod -R -x+X *

-xすべてがために削除しは、実行権限をすべてのために、しかし、実行権限を追加するだけディレクトリについて。
+X


2
最終的にアクセス許可を通常に戻すために使用したコマンド: `chmod -R a-x + X、u-x + rwX、go-wx + rX directory /
name`

3
BSDの例外に関するエドワードの回答も参照してください
fikr4n

4
これは、「フォルダーに触れることなく」要件に失敗します。一部のディレクトリでexecute(おそらく世界向け)が意図的に削除された場合はどうなりますか?追加しないでください。
ベンフォークト

4
これはMacでは機能しませんでした。-Rフラグを先頭に移動すると、LinuxとMac端末の両方でこの機能が動作します。chmod -R -x+x *
JoeMoe1984

2
実際には正しい順序でOSXで実行されますが、実際には望ましい効果がありません。次の2つの個別の手順として行う必要がありますchmod -R -x * && chmod -R +X *
。– Timmmm

14

さて、Mac OS X、BSD、およびLinuxの「chmod」のマニュアルページを読み直し、いくつかの実験を行いました。シンボリックモードについて学んだことは次のとおりです。複雑になりますが、理解する価値があります。

  • 一般的な形式は、 [、 …]です。ここで、
  • := [ugoa] [+-=] [rwxXstugo]
  • [ugoa](who)(複数指定)は、ユーザー、グループ、その他、またはすべてのアクセス許可を設定することを意味します。指定しない場合、デフォルトは「a」ですが、umaskは有効です。
  • [+-=](action)(1つを指定)は次を意味します。
    • +は、指定された許可を既に有効な許可に追加することを意味します
    • -既に有効な許可から指定された許可を削除することを意味します
    • =は、許可を指定された許可に設定し、他のすべてをクリアすることを意味します
  • [rwxXstugo](permission)(rwxXstの倍数またはugoの1つを指定)は、指定されたユーザーの許可を次のように設定します。
    • 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番目の句は、「fee」と「fie」の両方に追加します。ディレクトリであるため「fee」、開始するために少なくとも1つの実行可能ビットがあったため「fie」。

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バリアントでこれをテストしませんでした。


よろしくお願いします。これについての研究をしてくれてありがとう。
ジャクギブ

10

それを行う1つの方法:

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

6
これにより、変更したくないアクセス許可を追加または削除してしまう可能性があります。使用する方が良いchmod a-x {}
エドワードフォーク

1
@EdwardFalk chmod a-x {}は、変更したくないアクセス許可を削除してしまう可能性があり、ファイルを誰でも書き込み可能にする可能性があります。重要なのは、0644は「一般に合理的な」妥協案だということです。もちろん、OPは自分のコンピューターでインターネットからソリューションを適用する前に脳に関与する必要があります。
桂佐藤

4
「ax」は、ユーザー、グループ、その他の実行権限を削除し、私が知る限り、他の権限を変更しません。間違っていますか?
エドワードフォーク

1
@EdwardFalkいいえ、その通りです。しかし、ファイルのセットが実際に何であるかはわかりませんし、以前のパーミッションが何であるかもわかりませんchmod。バックアップファイルにスクリプトとバイナリが含まれている場合、xそれらを削除するのは間違っています。以前のアクセス許可chmodが0777の場合、chmod a-x0666のままになりますが、これはおそらく望んでいないものです。私が言っていることchmod 0644は、それはより良い発見的手法であり、chmod a-x間違っているということではありません。
桂佐藤

1
@NajibIdrissi UNIX権限を持たない外部ファイルシステムにコピーしたときに0777に変更された場合を除きます。これはまさにOPがしたことです。
桂佐藤

6
 find backup ! -type l ! -type d -exec chmod a-x {} +

タイプのディレクトリ(要求どおり)でもシンボリックリンクでもないファイルの実行権限を削除します(通常、シンボリックリンクは常にrwxrwxrwxでありchmod、シンボリックリンクのターゲットに影響します)。

ご了承ください:

 find backup -type f -exec chmod a-x {} +

通常のファイルの許可のみを変更します。それはディレクトリシンボリックリンクを除外しますがデバイス名前付きパイプソケット、そしておそらくシステムに依存する他のものも除外します(ただし、NTFSファイルシステムのバックアップのOPの場合、それらは存在しそうにないでしょう)。


2

zshでは、glob修飾子 .を使用して、通常のファイル(シンボリックリンクを含まない)のみDに一致し、ドットファイルに一致します。

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

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

zargs -- folder\ with\ restored\ backup/**/*(D.) -- sudo chmod a-x 
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.