
bash を使用して、wav または mp3 という名前のディレクトリを含まないディレクトリを削除するにはどうすればよいですか? macOS Sierra を使用しています。
find . -type d \! -exec test -e '{}/wav' \; -print
wav ディレクトリを含まないディレクトリを検索します。このコマンドに mp3 を含めるにはどうすればよいですか? また、結果のディレクトリを削除するにはどうすればよいでしょうか?
私の音楽ライブラリは、次の構造に従います:
/Musik/<Artist>/<format>/<Artist---Album>/<Track_Titel.wav>
、形式は wav または mp3 です。 カバーのみでオーディオ ファイルがないディレクトリが多数あります (例: )。したがって、空のディレクトリを検索して、オーディオ ファイルが含まれていないディレクトリを削除することはできません。
答え1
まず、これをする前に、ファイルのバックアップを作成します。
真剣に。
ディレクトリを直接含まないアーティストディレクトリ(およびその内容を再帰的に)を検索して削除するには(またはwav
またはmp3
(ケース)というタイトルのファイルセンシティブ) の場合は、次の操作を試してください。
find /Musik -mindepth 1 -maxdepth 1 -exec test \! -e {}/wav \; -exec test \! -e {}/mp3 \; -print
あなたが出力を確認した削除される予定のディレクトリに一致する(バックアップを再確認してください)次に以下を実行します:
find /Musik -mindepth 1 -maxdepth 1 -exec test \! -e {}/wav \; -exec test \! -e {}/mp3 \; -exec rm -rf {} \;
答え2
2 つのテストの場合はテストを 2 回実行し、両方が失敗した場合は何かを実行します。
find . -type d -exec bash -c "test -f \"{}\"/*wav || test -f \"{}\"/*mp3 || test -d \"{}\"/* || rm -rf \"{}\"" \;