いくつかのファイル形式を除くすべてのファイルを実行可能にする方法は?

いくつかのファイル形式を除くすべてのファイルを実行可能にする方法は?

多くのCソースファイルと同じ数のコンパイル出力ファイルを含むフォルダがあります。

これらすべてのファイルに対して実行可能ビットが設定されていましたが、何らかの理由で欠落して実行できなくなりました。(しばらく前にフォルダをNTFSパーティションに移動したためです。)

そのファイル(私のディレクトリの他のファイルを除く)を再実行可能にしたいと思います。 1つの可能な方法は、このフォルダ内のすべてのソースファイルを一時フォルダに移動して、次のことを行うことです。

chmod +x *

その後、ソースファイルを現在のフォルダに戻します。

ファイルを移動しなくても同じことができますか?

メモ:

コンパイルされた出力ファイルに拡張子がありません。(Cから)

ベストアンサー1

どのファイルを実行可能にするかを定義する方法によって異なります。たとえば、ファイル名にドットがないすべてのファイルを考慮する場合は、次のようにします。

find -type f -not -name "*.*" -exec chmod +x \{\} \;

これにより、ファイル名にドットがないすべてのファイル(ディレクトリではない)が繰り返し検索され、実行可能ファイルに設定されます。現在のディレクトリのみに制限するには、-maxdepth 1次のパラメータを追加します。

find -maxdepth 1 -type f -not -name "*.*" -exec chmod +x \{\} \;

fileまた、コマンドを使用して、ファイルがELF実行可能ファイルであるかどうかを知ることもできます。これを行うには、次のコマンドを実行できます。

find -type f -exec /bin/sh -c "file {} | grep -q executable && chmod +x {}" \;

これにより、すべての一般ファイルが再帰的に検索され、そのfileファイルのコマンドが呼び出されます。その後、grepはこのコマンドの出力で「実行可能」文字列(に似ている必要があります)を探しELF 32-bit LSB executable ...、見つかった場合にのみchmodこのファイルから呼び出されます。

もちろん-maxdepth 1、この場合は再帰検索を無効にすることもできます。

おすすめ記事