すべてのCプログラムを含むディレクトリがあります。また、コードをチェックするために、作成時にそれらをコンパイルしました。 100近くのプログラムがたくさんあります。したがって、ファイルが「.c」で終わるかどうかをチェックするBASHスクリプトが必要です。実行する場合は何も実行せず、実行しない場合は削除します。私のファイル名の1つが「Hello.c」であるとすると、コンパイル時にそのバイナリに「Hello」という名前を付けました。それで、誰かが私のためにこのスクリプトを作ることができますか?
find
の-delete
フラグを使用できます(-ls
を使用した最初のテスト)
find -not -name "*.c" -delete
find
を使用したくないが、現在のディレクトリ内のファイルのみを使用する場合は、
rm !(*.c)
bash
で、shopt -s extglob
を使用して正しいグロブが設定されていることを確認してください。さらに、globstarセット(shopt -s globstar
)がある場合は、再帰的に動作できます(4を超えるbash
バージョンの場合)。
rm **/!(*.c)
そのような場合、私は常にfind
を好みます。特別なファイル名について心配する必要はなく、さまざまなファイルタイプを処理できます。ファイルのみを削除したい場合は、オプションに-type f
を追加する必要があります。だから私のお気に入りの解決策は:
find -not -name "*.c" -type f -delete
ただし、注意してください。このようなコマンドをテストすることは常に良い考えです。
コマンド_shopt -s extglob
_を使用してksh拡張 ワイルドカードパターン をアクティブにします(これを_~/.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
_