Am Sonntag, 14. Februar 2010 18:17:01 schrieb David Haller: Hallo David,
Am Son, 14 Feb 2010, Al Bogner schrieb:
Am Sonntag, 14. Februar 2010 03:25:53 schrieb David Haller:
Am Sam, 13 Feb 2010, Al Bogner schrieb:
Am Samstag, 6. Februar 2010 20:24:20 schrieb David Haller:
Das zerbröselt's. for .. in `` oder $() ist _IMMER_ schlecht.
find "$DIR" -type f -iname '*.mp3' -exec /bin/bash -c 'for file; do lame ... "$file" "${file//.mp3}_128.mp3" done' find-bash '{}' '+'
Ich frage mich gerade wie ich folgendes ohne for hinkriege. Es geht zB darum, dass ein Skript alle gefundenen Dateien alfabetisch sortiert und diese dann durchnummeriert und als Dateinamen den Ordnernamen verwendet. Grundsätzlich wäre es mir mit for klar, aber mit Davids Konstruktion komme ich nicht weiter.
if test "x${DIR}" = "x." || test -z "$DIR"; then DIR="$PWD"; fi
Ich verstehe die Bedingung nicht. BTW es gibt um avi-Videoschnipsel von einem Camcorder und nicht um mp3.
Die Bedingungen testen, ob DIR '.' ist oder leer ist
Das habe ich mir schon so gedacht. Vielleicht fällt mir Basiswissen, das bis jetzt an mir vorbeigegangen ist. Normalerweise ist die Option $1. Ich verstehe aber nicht wie die übergeben wird.
(denn dann verwendet find per default '.' als Startordner und dann ist der Verzeichnisname beim Umbenennen (s.u.) eben "." und damit nicht sinnvoll verwendbar. In dem Fall wird DIR eben auf $PWD gesetzt und man bekommt (s.u.) den Namen des Verzeichnisses.
Du nimmst also an, dass das Verzeichnis abgearbeitet wird, in dem man sich befindet?
Mußt im Script halt .mp3 durch .avi ersetzen.
Schon klar. Ich habe nur den Anwendungsfall erwähnt, damit du dich besser hinein denken kannst, was ich will.
Aufruf soll etwa so sein:
video_rename.sh /verzeichnis/zu/videodateien
Siehe oben, wie ist das mit $1 ?
Weder im Verzeichnis, noch im Dateinamen kommen Leerzeichen vor, aber wenn ich schon was neu schreibe, dann sollte es auch damit klar kommen.
Sowieso ;)
BTW gibt es eine Möglichkeit hunderte kleine avi-Dateien alfabetisch sortiert zusammenhängend abzuspielen?
mplayer *.avi # du mußt alles laufen lassen
for f in *.avi; do mplayer "$f"; done # du kannst einzelne clips # abbrechen
Werde ich in der Praxis testen, sobald die verschiedenen Clips zusammengewürfelt wurden.
find "${DIR}" -type d | while read d; do pushd "$d";
Wieder was dazu gelernt. (http://ss64.com/bash/pushd.html) Ich habe dafür dirname und basename verwendet.
Ist ein kleiner Trick, damit man im jew. Verzeichnis arbeitet, dort dann die Dateiliste alphabetisch abarbeitet, und per popd wieder zurück (und das nächste Verz.).
i=0; for f in *.mp3; do test -d "$f" && continue; echo mv -i "$f" "${d##*\/}_$(printf "%05i.mp3" $i)";
das muss ich mir im Detail ansehen, wenn ich den Anfang verstanden habe.
Einfach gesagt: ${d##*\/} == $(basename "$d") == Verzeichnisname.
Muss ich noch besser verarbeiten
printf formatiert den Zähler auf 5 Stellen. 00000 bis 99999 halt.
ist klar
i=$((i+1)); done; popd;
Auch noch nicht gekannt: http://ss64.com/bash/popd.html
done
Wenn du anders sortieren willst als es die Shell bei * macht
Das habe ich nicht verstanden. Was meinst du mit anders?
Mach mal in nem Verz. mit nicht zu vielen Dateien
echo *
die bash sortiert das Ergebnis der Expansion alphabetisch bzw. gemäß LC_COLLATE. Und das reicht dir evtl. nicht.
Vermutlich schon. Ein Band hat Dateiname + Nummer, manchmal ist eine Bandnummer vor dem Text. 024_coteazur_3_0001.avi 024_coteazur_3_0002.avi ... 024_coteazur_3_0259.avi 024_coteazur_3_0260.avi Irgendwo wird es noch avi-Dateinamen mit Datum und Uhrzeit geben, so was ist mir noch nicht untergekommen, sollte aber egal sein.
Achso, oder wolltest du _verzeichnisübergreifend_ alphabetisch sortieren
Das hätte ich mir schon gewünscht. Als Option wird ein Verzeichnis angegeben, überprüft, ob dieses existiert und dann mit find alle avi-Dateien gesucht, die alfabetisch sortiert und dann mit dem Ordnernamen durchnummeriert. 4 stellen sollten reichen, also max. 000x.
und umbenennen? Oder nur, wie von mir angenommen, jew. pro Verzeichnis? Ersteres ginge auch, würde aber einige Trickserei mit Dateilisten erfordern.
Mit for und ohne Leerzeichne im Dateinamen habe ich da wenig getrickst ;-) Einfach find ... | sort. Al -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org