• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Leere Musik-Ordner herausfiltern!

kennt ihr das? ihr habt eine musiksamlung und mit der zeit sortiert man manche lieder aus. und das macht man ja mit einem player wo man aus dem programm heraus die lieder von der platte löschen kann.

dadurch entstehen natürlich verzeichnisse mit plattencovern und thumb.db dateien drin. diese verzeichnisse und dateien sind ja dann unnütz.
da hab ich mir aus dem ein script zusammengesucht, daß mich nur zu einem teilerfolg bringt und ich komm da nicht weiter!

mein bisheriges ergebnis ist, daß ich zwar alle verzeichnisse angezeigt bekomme, wo ich zwar keine lieder drin sind, ABER auch verzeichnisse, wo nur ein unterverzeichnis drin sind. die will ich aber nicht angeziegt bekommen, weil in dem unterverzeichnis wieder lieder drin sein könnten.

Code:
find "/home/bla/02 - BESCHALLUNG" -type d -not -exec sh -c 'ls "$0"/*.RAR "$0"/*.rar "$0"/*.zip "$0"/*.ZIP "$0"/*.mp3 "$0"/*.MP3 "$0"/*.Mp3 "$0"/*.mp4 "$0"/*.m4a "$0"/*.M4A "$0"/*.MP4 "$0"/*.ogg "$0"/*.OGG "$0"/*.wma "$0"/*.WMA "$0"/*.flac "$0"/*.FLAC "$0"/*.wav "$0"/*.WAV 2> /dev/null | grep -q . ' {} \; -print > "/home/bla/musikOrdner.sh"
sed 's/^/          /' "/home/bla/musikOrdner.sh" > "/home/bla/musikOrdner.sh.temp01"
sed 's/^          /nautilus "/g' "/home/bla/musikOrdner.sh.temp01" > "/home/bla/musikOrdner.sh.temp02"
sed 's/[ \t]*$//' "/home/bla/musikOrdner.sh.temp02" > "/home/bla/musikOrdner.sh.temp03"
sed 's/$/"/' "/home/bla/musikOrdner.sh.temp03" > "/home/bla/musikOrdner.sh.temp04"
sed 's/nautilus \"\/home\/bla\/02 - BESCHALLUNG\"/\#\!\/bin\/bash/' "/home/bla/musikOrdner.sh.temp04" > "/home/bla/musikOrdner.sh"
. "/home/bla/musikOrdner.sh"

hat einer nen tip für?
 
OP
R

Reiner Text

Newbie
ich will ja nicht einfach leere ordner, sondern nur ordner die entweder leer sind ODER dateien enthalten (wie zb cover, thumb.db etc) die keine musikdateien sind.
 
A

Anonymous

Gast
'ls "$0"/*.RAR "$0"/*.rar "$0"/*.zip "$0"/*.ZIP "$0"/*.mp3 "$0"/*.MP3 "$0"/*.Mp3 "$0"/*.mp4 "$0"/*.m4a "$0"/*.M4A "$0"/*.MP4 "$0"/*.ogg "$0"/*.OGG "$0"/*.wma "$0"/*.WMA "$0"/*.flac "$0"/*.FLAC "$0"/*.wav "$0"/*.WAV
:???: :???: :???: :???: :???: :???: :???:
Dein Ansatz ist sehr fehleranfällig.

hinzu kommen wahrscheinlich noch einige Dinge die du uns bisher verschwiegen hast, Leerzeichen und jede Menge Sonderzeichen in den Datei- und Verzeichnisnamen und eventuell sogar noch unterschiedlichen Zeichencodierungen. Schließlich kann man ja nicht alles selber rippen ;) oder doch ?

Wie viele solcher Verzeichnisse sind es denn? lohnt sich ein Script oder geht es auch per Hand.

Einfachste Methode die ich wahrscheilich wählen würde, Radikalkur mit Backup und umgedrehtem Problem. Hier mal die Vorgehensweise ohne Garantie und ohne sie zu testen, da hierbei überhaupt nicht abzusehen ist, welche zusätzlichen Probleme du in deinen Dateibäumen versteckt hast, währe das sowieso nicht sehr aussagekräftig.

Code:
find . -type f -name ".igendwas" ....
Damit erst einmal ausprobieren, du musst alle Dateitypen damit finden, die wenn sie alleine im Verzeichnis sind, das Verzeichnis gelöscht werden kann. also die thumb.db und die plattencovers, und zwar ausnahmslos von allen Verzeichnissen.

Wenn der genaue find-Befehl gefunden wurde, dann
Code:
find . -type f -name ".igendwas" -print0 | cpio -oc0  > /tmp/sicherungsdatei.cpio
damit wird eine Sicherungsdatei dieser Dateien angelegt.
jetzt kommt der Witz. ;)
Code:
find . -type f -name ".igendwas" -print0 | xargs -0 rm
alle diese Dateien löschen, ausnahmslos, wir haben ja ein Backup davon.
jetzt kannst du in Ruhe alle leeren Verzeichnisse suchen und löschen, (mit rmdir löschen.damit du auch wirklich nur die leeren löscht.)
dann einfach das Backup wieder mit folgendem Befehl einspielen. (Aufpassen, du solltest jetzt im selben Verzeichnis stehen in dem du vorhin das Backup erstellt hast.)
Code:
cpio -imc <  /tmp/sicherungsdatei.cpio
Dieser Befehl wird dir alle gelöschten Dateien in den Verzeichnissen wieder herstellen, außer denen in den mittlerweile gelöschten Verzeichnissen, das wird erreicht, da die Option "-d" bei cpio nicht mit angegeben wird.
Du erhältst statt dessen jedesmal bei einem gelöschten Verzeichnis ein Fehlermeldung " cpio:Verzeichnis/datei: Cannot open: Datei oder Verzeichnis nicht gefunden"


Ist eben Radikalkur und nichts für jedermann ;)

robi
 
Oben