「.c」で終わらないファイルを削除するには?

「.c」で終わらないファイルを削除するには?

すべてのCプログラムを含むディレクトリがあります。また、コードを確認できるように生成時にコンパイルしました。プログラムはほぼ100に達します。そのため、ファイルが「.c」で終わるかどうかを確認するBASHスクリプトが必要です。そうであれば何もしません。そうでなければ削除します。私のファイル名の1つが「Hello.c」であると仮定し、コンパイルするときにバイナリ名を「Hello」と指定します。誰かが私のためにこのスクリプトを作成できますか?

答え1

-delete(最初のテスト)フラグを使用できますfind-ls

find -not -name "*.c" -delete

を使用せずにfind現在のディレクトリのファイルのみを使用したい場合は、次のことができます。

rm !(*.c)

正しいワイルドカードがbash設定されていることを確認してください。shopt -s extglobまた、globstar()を設定するとshopt -s globstar再帰的に作業できます(bashバージョン4+の場合)。

rm **/!(*.c)

答え2

find私はいつもこのケースを好みます。特別なファイル名について心配する必要はなく、さまざまなファイル形式を処理できます。ファイルのみを削除するには、-type fオプションにこのエントリを追加する必要があります。だから私の好きな解決策は次のとおりです。

find -not -name "*.c" -type f -delete

それでも注意してください。このようなコマンドをテストすることは常に良い考えです。

答え3

ksh 拡張の有効化ワイルドカードパターンコマンドを使用してくださいshopt -s extglob(に入れることができます~/.bashrc)。その後、パターンは!(*.c)一致するファイルを除いて現在のディレクトリ内のすべてのファイルと一致します*.c

rm !(*.c)

.txtこれはファイル、.hファイルなどを削除するため、非常に危険です。あまり大胆でないコマンドは次のとおりです。

rm !(*.*) *.o

それでも等は削除されますREADMEMakefileおそらく実行可能ファイルを削除する必要があります。

find . -type d -prune -o -type f -perm -100 -exec rm {} +

サポートしている場合は、より短くfind

find . -maxdepth 1 -type f -perm -100 -delete

関連情報