Hallo, Am Son, 14 Feb 2010, Al Bogner schrieb:
Am Sonntag, 14. Februar 2010 18:17:01 schrieb David Haller:
Am Son, 14 Feb 2010, Al Bogner schrieb:
Am Sonntag, 14. Februar 2010 03:25:53 schrieb David Haller: [..]
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.
Dann denk dir ein 'DIR="$1"' als erste Zeile nach #!/bin/bash ;) Ich nahm bisher an, daß das nicht unbedingt als script gedacht ist.
(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?
Nein. Das, was per DIR (s.o.) übergeben wird. Dort wird dann jedes Unterverzeichnis _einzeln_ verwurstet (d.h. die darin befindlichen *.avi umbenannt). Das ist die pushd+popd Geschichte. [..]
Einfach gesagt: ${d##*\/} == $(basename "$d") == Verzeichnisname.
Muss ich noch besser verarbeiten
man bash -> nach :- suchen, da landest du IIRC recht genau in dem Abschnitt wo das erklärt wird.
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
Dann dürfte Sortierung nach LC_COLLATE=POSIX oder =de_DE reichen, d.h. man könnte wohl schlicht die Shell den '*' expandieren lassen und sich ein explizites 'sort' sparen. Aber s.u.
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.
_WO_ willst du sortieren? Innerhalb a) jedes einzelnen Unterverzeichnisses oder willst du _alle_ Dateien ab dem Startverzeichnis b) mit oder c) ohne die jew. Unterver- zeichnisse sortieren?
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.
Das wäre Variante b). Sortiert wird "nach Text" die Dateiliste, wie sie ein find . -type f | sort ausspuckt, und die Dateien dieser Liste dann eben umbenamst? Also z.B. alle Dateien aus ./bla/ landen (umbenamst) vor allen Datein aus ./foo/? Also z.B.: ./bla/bla_0001.avi \ ... > = alles aus bla ./bla/bla_0123.avi / ./foo/foo_0124.avi \ ... > = alles aus foo ./foo/foo_0154.avi / Das wäre schon (bis auf das bestimmen des Verzichnisnamens) wieder trivial. find | sort und ne Zählervariable. Mail mir doch evtl mal ein _konkretes_ (gekürztes) Beispiel per PM. -dnh -- "Wenn das Wörtchen 'wenn' nicht wär' , wär' die Platte jetzt nicht leer." -- ratti in suse-linux -- 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