Shell: wiedermal ein Problem mit Leerzeichen
-
Ich hab ein Shellscript, in dem sowas drin steht:
for foo in ../*; do irgendwasstunmit $foo; done
Das entscheidende ist hierbei eigentlich das ../*
Ich will statt allen Dateien im Mutterverzeichnis in alphabetischer Reihenfolge die Dateien in chronologischer Reihenfolge haben.Sobald ich aber irgendwas in der Form
for foo in `ls -td ../*`; do irgendwasstunmit $foo; done
verwende, geht nichts mehr, da die Dateinamen Leerzeichen enthalten.
Wisst ihr, wie ich das machen kann?
-
einfach das $foo in "" setzen
for foo in `ls -td ../*`; do irgendwasstunmit "$foo"; done
-
Das hatte ich schon. Leider funktioniert es trotzdem nicht.
Also das Script fuehre ich in einem Verzeichnis "playlists" aus. Es erstellt mir dann fuer die ganzen Alben im uebergeordneten Verzeichnis Playlists:
for album in ../*; do echo "bearbeite $album..."; albumname=`basename "$album"`; find "$album" -name *.mp3|sort > "$albumname" .m3u; done
Wenn ich das wie folgt aendere, funktioniert es nicht mehr:
for album in `ls -1td ../*`; do echo "bearbeite $album..."; albumname=`basename "$album"`; find "$album" -name *.mp3|sort > "$albumname" .m3u; done
-
Hi,
ist das Problem noch aktuell?
Wie wäre es, wenn Du es so machst:
ls ../*.mp3 | while read ALBUM do echo " Bearbeite $ALBUM" ALBUMNAME=`basename $ALBUM` ...wasauchimmer... done
Du kannst das ls / ll / von mir aus auch find - Ergebnis vor dem while
ja anpassen wie Du möchtest. Du kannst das Ergebnis auch in eine Datei
umleiten, sortieren und vor dem while ein cat auf den Dateinamen machen.
-
Danke fuer die Anwort.
Ich habe es jetzt syntaktisch korrekt hinbekommen, habe allerdings herausgefunden, dass es so nicht funktioniert. Die letzte Zugriffszeit von Dateien wird anscheinend "nur" sekundengenau gespeichert und das Script laeuft nur wenige Sekunden.
Mein Ziel, die Playlists in der gleichen chronologischen Reihenfolge, wie die eigentlichen Alben verwenden zu koennen, ist so wahrscheinlich nicht erreichbar.
Ich koennte natuerlich ein "sleep 1" reinsetzen, das ist aber recht witzlos, finde ich.Ich erstelle jetzt allerdings nur noch eine Playlist, wenn noch keine vorhanden ist.
Das erlaubt mir dann zwar nicht rueckwirkend, die Playlists in die chronologische Reihenfolge zu bekommen, fuer zukuenftige funktioniert es aber. Halbwegs zufriedenstellend.#!/bin/bash /bin/ls -1d ../*| while read album do albumname=`basename "$album"` if ! [[ -e "$albumname".m3u ]]; then echo "Bearbeite $album" find "$album" -name *.mp3|sort > "$albumname".m3u; fi done
Wenn ihr ne Idee habt, wie sich die chronologische Reihenfolge "uebernehmen" laesst, waere ich euch dafuer natuerlich dankbar.
-
...wenn Du mir etwas genaueres über die Datei/Verzeichnis-Struktur schreiben kannst bzw. wie die Datei/Verzeichnisnamen heissen...
So kann ich da leider keinen Anpack finden...
-
ok, die Verzeichnisstruktur ist recht einfach:
in einem Verzeichnis "Musik" befinden sich Verzeichnisse(fuer jedes Album eines), innerhalb der Verzeichnisse sind die mp3s (+ evtl. noch ein paar andere Dateien). Unterverzeichnisse gibt es keine. Ebenfalls im Verzeichnis "Musik" ist das Verzeichnis "playlists", ich welchesdie Playlists der Alben sollen.Das eine Album habe ich z.B. im Januar '04 bekommen, ein anderes im Oktober '03, usw.
Ich haette die Playlists nun eben gerne in dieser Reihenfolge. (also wie "ls -t")
-
Du kannst ja mit ls -rt die Reihenfolge so einstellen, das die Verzeichnisse
nach Datum sortiert, aktuellstes zuletzt, angezeigt werden.Ansonsten sortier doch in einer Datei so wie Du es brauchst.
Entweder nach Erstelldatum des Verzeichnisses oder alphanumerisch.
Wäre es eventuell Sinnvoll die Verzeichnisse so umzubenennen,
dass sie einen zeitstempel vorne und einen Namen Deiner Wahl dahinter haben?z.B.
jjmmtthhmmss_Album_04.....
und im Script haust Du mit dem sed die Unterstriche raus und der awk
überliest Dir den Zeitstempel...nur so eine Idee...
-
Deine Vorschlaege kann ich leider nicht umsetzen, da ich die Playlists in ein closed-source-Programm laden muss, dass mit all dem nicht umgehen koennte.
Ist aber eigentlich ganz ok, so wie es jetzt laeuft.
Danke & Gruss.