bash: Löschen von Verzeichnissen, die bestimmte Zeichenfolgen nicht enthalten

bash: Löschen von Verzeichnissen, die bestimmte Zeichenfolgen nicht enthalten

Wie kann ich mit der Bash Verzeichnisse löschen, die keine Verzeichnisse mit dem Namen „wav“ oder „mp3“ enthalten? Ich verwende macOS Sierra.

find . -type d \! -exec test -e '{}/wav' \; -printfindet die Verzeichnisse, die keine WAV-Verzeichnisse enthalten. Wie kann ich MP3 in diesen Befehl einbinden? Und wie kann ich die resultierenden Verzeichnisse löschen?

Meine Musikbibliothek folgt dieser Struktur: /Musik/<Artist>/<format>/<Artist---Album>/<Track_Titel.wav>, wobei das Format WAV oder MP3 ist. Es gibt viele Verzeichnisse ohne Audiodateien, aber mit Covers, z. B. Daher kann ich nicht einfach nach leeren Verzeichnissen suchen, um diejenigen zu löschen, die keine Audiodateien enthalten.

Antwort1

Bevor Sie dies tun,Erstellen Sie eine Sicherungskopie Ihrer Dateien.

Ernsthaft.


Um Artist-Verzeichnisse (und deren Inhalt, rekursiv) zu finden und zu entfernen, die nicht direkt Verzeichnisse enthalten (oderDateien) mit dem Titel entweder wavoder mp3(Fallempfindlich), Versuche Folgendes:

find /Musik -mindepth 1 -maxdepth 1 -exec test \! -e {}/wav \; -exec test \! -e {}/mp3 \; -print

Erst wenn Siebestätigte die Ausgabeentspricht den Verzeichnissen, die gelöscht werden sollen(und Ihr Backup doppelt überprüft)sollten Sie dann ausführen:

find /Musik -mindepth 1 -maxdepth 1 -exec test \! -e {}/wav \; -exec test \! -e {}/mp3 \; -exec rm -rf {} \;

Antwort2

Führen Sie für zwei Tests den Test zweimal aus. Wenn beide Tests fehlschlagen, unternehmen Sie Folgendes:

find . -type d -exec bash -c "test -f \"{}\"/*wav || test -f \"{}\"/*mp3 || test -d \"{}\"/* || rm -rf \"{}\"" \;

verwandte Informationen