Rename Skript
Rename Skript
So - irgendwann muß ich die Bash ja mal programmieren lernen. Vielleicht könnt ihr mir ja bei meinen ersten Schritten helfen, bei google hab ich keine präzise Antwort gefunden.
Ich will ein Skript schreiben, das mir alle Dateien in einem Verzeichnis dem Zeitstempel nach durchnummeriert, also in
001.mp3
002.mp3... usw.
Prozedurales Programmieren kenn ich, nur die Syntax und die meisten Befehle für Bash-Skripting sind mir noch ziemlich schleierhaft. Eine for-next-Schleife kriege ich noch hin aber dann:
1. Wie lese ich den Timestamp einer Datei aus?
2. Gibt es eine Sortierfunktion, die ich nutzen kann, oder muß ich alle Dateien in einen Array laden und mir eine Sortierroutine schreiben?
Freu mich über jede Hilfe,
O
Ich will ein Skript schreiben, das mir alle Dateien in einem Verzeichnis dem Zeitstempel nach durchnummeriert, also in
001.mp3
002.mp3... usw.
Prozedurales Programmieren kenn ich, nur die Syntax und die meisten Befehle für Bash-Skripting sind mir noch ziemlich schleierhaft. Eine for-next-Schleife kriege ich noch hin aber dann:
1. Wie lese ich den Timestamp einer Datei aus?
2. Gibt es eine Sortierfunktion, die ich nutzen kann, oder muß ich alle Dateien in einen Array laden und mir eine Sortierroutine schreiben?
Freu mich über jede Hilfe,
O
Re: Rename Skript
Soviel Bash brauchst du da gar nicht.
"man bash" finde ich besser als google. ist bei bash IMHO nur bei spezifischen Problemen gut.
-- A.
Code: Alles auswählen
ls --sort=time
-- A.
Re: Rename Skript
--> man statOzelot hat geschrieben:1. Wie lese ich den Timestamp einer Datei aus?
--> man find
Anstatt eines Arrays würde man wohl eher eine Textdatei nehmen mit Timestamp (hier ein "schön" sortierbares Format wählen!) und Filename. Das dann durch "sort" (mit passenden Optionen) gejagt ist schon die halbe Miete und den Rest findest du dann auch noch...Ozelot hat geschrieben:2. Gibt es eine Sortierfunktion, die ich nutzen kann, oder muß ich alle Dateien in einen Array laden und mir eine Sortierroutine schreiben?
Re: Rename Skript
Besten Dank Euch!
Das ist ja wirklich alles schön einfach...
aber halt: Wie extrahiere ich jetzt aus diesem Output die einzelnen Dateinamen, bzw. wie füttere ich das in eine "for"-Anweisung statt des Sterns?
Das ist ja wirklich alles schön einfach...
aber halt: Wie extrahiere ich jetzt aus diesem Output die einzelnen Dateinamen, bzw. wie füttere ich das in eine "for"-Anweisung statt des Sterns?
- JaKlaRo
- Beiträge: 121
- Registriert: 06.03.2008 15:00:00
- Lizenz eigener Beiträge: GNU General Public License
-
Kontaktdaten:
Re: Rename Skript
Das wird wohl reichen:
JaKlaRo
Code: Alles auswählen
j=0; for i in `ls --sort=time -r`; do echo "$j.$i"; let j=j+1; done
Re: Rename Skript
Manchmal wird das aber nicht reichen, denn die Kommandozeile darf nicht beliebig lang werden und bei bestialisch vollen Directories kann das "ls" in Backticks gar übel expandieren...JaKlaRo hat geschrieben:Das wird wohl reichen:Code: Alles auswählen
j=0; for i in `ls --sort=time -r`; do echo "$j.$i"; let j=j+1; done
Re: Rename Skript
Ok... bleiben wir mal bei "ls" ... dann schwebt mir statt eventuell wahnwitzig lang werdender Kommandozeilensubstitutionen eher sowas vor:
...bei bösen Dateinamen mit Leerzeichen oder anderen bösen Sonderzeichen muß man nochmal genauer hinschauen...
Code: Alles auswählen
ls -t | awk '{ printf "mv %s %s.mp3\n",$1,NR }'