具体的には、chmod -R 755
でした。これで、すべてのファイルが実行可能になりました。 #!
の各ファイルの最初の2バイトを調べる必要があると考えていますが、これですべてがカバーされますか?代わりにfile
を使用してすべてを確認し、それに基づいて判断を下す必要がありますか?または、より可能性が高いのは、これを行うためのさらに良い方法はありますか?
ディレクトリを再帰的に実行し、実行可能ではないと思われるファイルに-xを設定するための推奨される方法は何ですか?
私はあなたが何かのようなものが欲しいと信じています
find dir -type f -exec chmod ugo-x '{}' +
これにより、dirで再帰的にすべての通常のファイルが検索され(ディレクトリとデバイスは除外されます)、実行可能ビットが削除されます。
私はここから始めて、実行可能であるはずのファイルを実行可能にするために自分の道を進みます。
以下はあなたが要求したとおりに機能するはずです(すべての通常のファイルが見つかり、それらを#!でgrepし、見つからない場合はxビットを削除します)
find . -type f | xargs grep -L #! | xargs chmod ugo-x
おそらく上記のより良いバージョン(より少ないパイプ)
find . -type f -exec grep -L #! '{}' + | xargs chmod ugo-x
まあ、Shebang行がないと、ファイルはシェルスクリプトとして実行され、通常は/bin/sh
。あなたは良い出発点であり、問題のディレクトリにミッションクリティカルなファイルが含まれていないという前提で、grep
とchmod
のコンボを実行するリスクはおそらくそれほどありません。誤検知、つまり実行可能ビットが設定されているはずのないシバン行を含むファイルが発生する可能性がありますが、ディレクトリの内容の目的に関する詳細情報がわからない場合は、それが存在に重大な脅威をもたらすかどうかを判断することができますシステムおよび/またはデータ。