すべての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
それでも等は削除されますREADME
。Makefile
おそらく実行可能ファイルを削除する必要があります。
find . -type d -prune -o -type f -perm -100 -exec rm {} +
サポートしている場合は、より短くfind
:
find . -maxdepth 1 -type f -perm -100 -delete