web-dev-qa-db-ja.com

ディレクトリではなくファイルから再帰的に実行可能ビットを削除する方法

USBスティック(FAT)をMacまたはUbuntuマシンに差し込むと、すべてのファイルに実行可能ビットが設定されます。ディレクトリ構造をハードディスクにコピーした後、ファイルから再帰的に実行可能ビットを削除してディレクトリに保存する方法

73
Mike L.

GNU chmod(Ubuntuの場合)単一コマンドバリアント(現在のディレクトリから開始)の場合:

chmod -R -x+X .

説明:

  • -R - 再帰的に動作します
  • -x - すべてのユーザーの実行可能フラグを削除する
  • +X - ディレクトリであればすべてのユーザーに実行可能フラグを設定する

この場合、すべての実行可能フラグが-xによってクリアされるため、大文字のXはディレクトリにのみ適用されます。それ以外の場合、+Xは、フラグが元々ユーザー、グループ、その他のいずれかに設定されていた場合にも実行可能フラグを設定します。

BSD chmod(これはMac OS Xにあります)では、2つのコマンドで別々にそれをしなければなりません:

Sudo chmod -R -x * && Sudo chmod -R +X *

(隠しファイルをメインディレクトリにも含めたい場合は、おそらく*を。(ポイント)に変更する必要がありますが、テストは行われていません。

130
pabouk

最初に正しいパスに移動した場合:

find . -type f -exec chmod -x {} \;

または

chmod -x $(find . -type f)

Findは、パス内のタイプ 'f'(通常のファイルを意味する)のすべてのファイルを検索します。その後、各ファイルに対してchmod -xを呼び出します。 {}はファイル名と\に置き換えられます。 chmodコマンドを終了します。

46
Matthijs P

LinuxおよびUnixの端末ウィンドウ、またはMac OS Xでは、Terminal.appでこれを使用します。

find . -type f -print0 | xargs -0 chmod -x
3
user227317

Ubuntuでもchmod -x+Xのやり方は私にはうまくいきませんでしたので、私はこの最小限のpythonスクリプトを書きました:

#!/usr/bin/python3
import os
for par, dirs, files in os.walk('.'):
    for d in dirs:
        os.chmod(par + '/' + d, 0o755)
    for f in files:
        os.chmod(par + '/' + f, 0o644)

あなたのファイルシステムにソケットのような気の利いた余分なものがあるかもしれないなら、あなたはtry/catchで最後のchmodを囲むことができます。

2
mic_e