• Wieder einmal haben uns unsere Apfeltalker tolle Fotos zur Abstimmung eingesandt. Welches ist Euer Favorit? Stimmt mit ab! Hier geht es zur Abstimmung --> Klick
  • Es ist bereits Apfeltalk-Tradition und wir möchten sie auch in diesem Jahr fortsetzen: Unser Apfeltalk-Weihnachtslogo-Wettbewerb hat begonnen! Gestaltet für uns das Weihnachtsbanner, das im Monat Dezember bis zum Weihnachtsfest unsere Webseite schmücken soll. Lasst Eurer Kreativität freien Lauf! Hier geht es zum Wettbewerb --> Klick

[10.6 Snow Leopard] Kommandozeilendatei zum Löschen von Dateien

peters1

Niederhelfenschwiler Beeriapfel
Registriert
15.07.09
Beiträge
842
Hallo,
ich habe ein SONOS-System zum Abspielen von Musik. Mein Verzeichnis mit Musik ist aber voll mit anderen Dateitypen wie Grafiken des Covers, Liedtexten etc. Die möchte ich aus dem Duplikat der externen Platte am SONOS-System löschen. Dazu habe ich mir eine Datei mit Endung .command erstellt:

Hiermit SOLL das erledigt werden:

find //Volumes/USBtoATAATAPIbridge-part00/Songs/ -type f ! -iregex .*\.mp3 -and ! -iregex .*\.wma -and ! -iregex .*\.aac -and ! -iregex .*\.ogg -and ! -iregex .*\.wav -and ! -iregex .*\.wav -and ! -iregex .*\.flac -and ! -iregex .*\.alac -and ! -iregex .*\.aiff -and ! -iregex .*\.wav | xargs rm

- Leider meldet mir das Skript, dass ich nicht die notwendigen Rechte habe. Was muss ich wo einstellen?
- Wenn ich den Text in das Terminal kopiere und ausführen lasse, bekomme ich den Hinweis, "unterminated quote"!?? Wenn da Gänsefüßchen in Dateinamen sind, stören die? Wenn ja, wie kann ich das verhindern?

Ohne das "| xargs rm" listed der mir brav alle zu löschen Dateien auf. Also kann nur "rm" mit den Dateinamen nichts anfangen, oder? Finde den Fehler leider nicht!
Gruß und frohe Weihnachten
Dirk
 
1) Vermutlich meinst du, die datei selbst kann nicht ausgeführt werden.
Code:
chmod a+x "[I]Skriptdatei[/I]"
...erledigt das.

2) All deine Asterisks werden schon von der Shell "geglobbt" und in eine Namensliste expandiert, erst dann wird an find übergeben (so wie bei allen anderen Befehlen auch). Du nicht wollen das.
Willst du sie dagegen unverändert als einen erst "innerhalb" von find zu verarbeitenden RegExp ins Kommando aufnehmen, darf die bash sie nicht sehen. Verpacke deine Ausdrücke (einzeln) in Single-Quotes - dann gehen die Sternchen etc als literaler Text durch.

3) Zum löschen von Objekten dient die bequeme find-Direktive "-delete" am Ende.
Kein Piping zu xargs etc erforderlich. (man find)
 
1-3 Vielen Dank. Klappte alles perfekt.
Meldet zwar noch Probleme mit .DS.Store-Dateien, aber die jucken mich nicht.

Für den, den dann auch die Lösung interessiert:

find //Volumes/USBtoATAATAPIbridge-part00/Songs/ -type f ! -iregex '.*\.mp3' -and ! -iregex '.*\.wma' -and ! -iregex '.*\.aac' -and ! -iregex '.*\.ogg' -and ! -iregex '.*\.wav' -and ! -iregex '.*\.wav' -and ! -iregex '.*\.flac' -and ! -iregex '.*\.alac' -and ! -iregex '.*\.aiff' -and ! -iregex '.*\.wav' -delete