多数のファイル拡張子が混在するディレクトリがあり、特定のファイル拡張子(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