Rename Skript

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Ozelot
Beiträge: 1515
Registriert: 18.11.2007 09:52:58

Rename Skript

Beitrag von Ozelot » 04.08.2009 22:22:01

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

Benutzeravatar
format_c
Beiträge: 188
Registriert: 23.01.2008 14:24:17
Kontaktdaten:

Re: Rename Skript

Beitrag von format_c » 04.08.2009 22:59:27

Soviel Bash brauchst du da gar nicht.

Code: Alles auswählen

ls --sort=time
"man bash" finde ich besser als google. :google: ist bei bash IMHO nur bei spezifischen Problemen gut.

-- A.

yeti

Re: Rename Skript

Beitrag von yeti » 04.08.2009 23:31:25

Ozelot hat geschrieben:1. Wie lese ich den Timestamp einer Datei aus?
--> man stat
--> man find
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?
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
Beiträge: 1515
Registriert: 18.11.2007 09:52:58

Re: Rename Skript

Beitrag von Ozelot » 04.08.2009 23:34:39

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?

Benutzeravatar
JaKlaRo
Beiträge: 121
Registriert: 06.03.2008 15:00:00
Lizenz eigener Beiträge: GNU General Public License
Kontaktdaten:

Re: Rename Skript

Beitrag von JaKlaRo » 04.08.2009 23:44:48

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
JaKlaRo

yeti

Re: Rename Skript

Beitrag von yeti » 04.08.2009 23:52:54

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
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...

yeti

Re: Rename Skript

Beitrag von yeti » 05.08.2009 00:08:30

Ok... bleiben wir mal bei "ls" ... dann schwebt mir statt eventuell wahnwitzig lang werdender Kommandozeilensubstitutionen eher sowas vor:

Code: Alles auswählen

ls -t | awk '{ printf "mv %s %s.mp3\n",$1,NR }'
...bei bösen Dateinamen mit Leerzeichen oder anderen bösen Sonderzeichen muß man nochmal genauer hinschauen...

Antworten