多数のファイル拡張子が混在するディレクトリがあり、特定のファイル拡張子(grep *.mp3など)をリストしたいと思います。 )そしてリストしている間、出力でそれらを削除します。どうすればそれができますか、または重複がある場合は、遠慮なくタグを付けてください。
例:
grep "*.mp3" . | rm -fr
承認された回答:
3つのmp3があるディレクトリから始めましょう ファイル:
$ ls *mp3
a.mp3 b.mp3 c.mp3
削除するものをリストした後、それらを削除しましょう:
$ find . -maxdepth 1 -name '*.mp3' -printf 'Deleting %p\n' -delete
Deleting ./a.mp3
Deleting ./b.mp3
Deleting ./c.mp3
これが行われた後、mp3 ファイルがなくなった:
$ ls *mp3
ls: cannot access '*mp3': No such file or directory
仕組み
-
`検索。
これにより、
findが開始されます 指図。現在のディレクトリ.でファイルを検索します。 。 -
-maxdepth 1デフォルトでは、
findサブディレクトリを再帰的に検索します。これはそれをしないように指示します。-maxdepth 1を使用 、コマンドfind現在のディレクトリで見つかったものだけを調べ、現在のディレクトリのサブディレクトリは調べません。 -
-name '*.mp3'これにより、findは
.mp3のファイルのみを検索するように指示されます。 拡張機能。 -
-printf 'Deleting %p\n'これは、見つかった各ファイルに関するメッセージを出力するようにfindに指示します。
もちろん、必要に応じてこれを別のメッセージに変更することもできます。メッセージが不要な場合は、このオプションを完全に省略できます。
-
-deleteこれにより、findは各ファイルを削除するように指示されます。
大文字と小文字を区別しない検索
.MP3という名前のファイルも検索する場合 または.Mp3 など、大文字と小文字を区別しない検索が必要で、-inameを使用します :
find . -maxdepth 1 -iname '*.mp3' -printf 'Deleting %p\n' -delete