
私は「find」コマンドを使用して、コマンドを実行しているディレクトリにあるすべてのサブフォルダーから、指定された拡張子の不要なファイルをいくつか削除しています。
find -type f -name *.txt -delete
find -type f -name *.xml -delete
find -type f -name *.pdbqt -delete
find -type f -name *.txt -delete
これら 4 つのコマンドを 1 つに組み合わせて、1 つのコマンドで 4 種類のファイルを削除することは可能ですか? 代わりに、find を使用して、*.dlg 拡張子に属さないすべてのファイルを削除することは可能ですか?
答え1
引用符なし*.txt
はダメです。find
ユーティリティはワイルドカードを使用するとすべてのファイルを出力しない。
これら 4 つのコマンドを 1 つにまとめることは可能ですか?
find . \( -name '*.txt' -o -name '*.xml' -o -name '*.pdbqt' \) …
(4 番目のコマンドは 1 番目のコマンドを複製するため、同じパターンを 2 回使用しても意味がないため、3 つのパターンを使用します。)
find
拡張子に属さないすべてのファイルを削除するために、代わりに を使用することは可能ですか*.dlg
?
はい(すべてのファイルではなく、通常のファイルが必要なのだと思います)ファイル):
find . -type f ! -name '*.dlg' # -delete
上記のコマンドで本当に削除したいファイルが出力される場合は、#
削除して実行してください。
テスト! -name '*.dlg'
は否定されます。が失敗する-name '*.dlg'
場合にのみ成功します。-name '*.dlg'
-delete
質問で使用しましたので、find
明らかにサポートしています。権限の少ないユーザーfind
はfind
: -exec rm {} \;
vs. -delete
- なぜ前者が広く推奨されているのでしょうか?
あなたの場合、 bare はfind
のように動作することに注意してください。の実装によっては、コマンド ラインに少なくとも 1 つのパスが必要なので、を明示的にfind .
使用しました。find .
find