PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Shell soll alle Dateien eines Verzeichnisses fortlaufend nummerieren



CaptainAlphabet
26-03-2004, 19:36
Bestimmt könnt ihr mir bei einem kleinen Shell Script behilflich sein. Ich möchte, dass alle Dateien eines Verzeichnisses, mit Ausnahme der Unterordner, wie folgt umbenannt werden: 0001.jpg, 0002.jpg, 0003.jpg,...

Das Problem ist, dass ich nicht weiß, wie ich die Ausgabe von "ls" als Parameter an eine Schleife übergebe und wie die Dateinamen immer um 1 erhöht werden.

Hans-Georg Normann
26-03-2004, 21:04
Original geschrieben von CaptainAlphabet Das Problem ist, dass ich nicht weiß, wie ich die Ausgabe von "ls" als Parameter an eine Schleife übergebe und wie die Dateinamen immer um 1 erhöht werden. [/B]arrrrggg, vergiss ls und nimm find.
find . -iname "*.jpg" -maxdepth 0 -exec machwas.sh {} \;sollte dein Freund sein. Die Klammern {} werden zur Laufzeit durch die gefundene Datei ersetzt. Dann wird bei jedem Treffer das shellscript machwas.sh aufgerufen. Aber vorsicht, wenn die Dateinamen Leerzeichen enthalten. Mit
a=1
a=$(expr $a + 2) kann man in der Shell rechnen

Einen andere Variante wäre der awk. Erst ein Liste der Dateien erstellen und diese dann Zeile für Zeile abarbeiten. Braucht sicherlich etwas Einarbeitungszei, ist aber eine sehr reizfolle Aufgabe. Hat vor allen dingen einen so schönen printf - Befehl, mit dem man sehr gut Zahlen formatieren kann.

gerade noch gesehen
[hans@rosi hans]$ printf "%05d\n" 3
00003
[hans@rosi hans]$Geht in der bash also auch!

Hans

oafish
29-03-2004, 07:36
Morgen,
es gibt in der Bash die Möglichkeit eine For-Schleife zu machen wie sie aus C usw. bekannt ist. Du kannst aber auch mit for i in $(ls); do die Inhalte eines Verzeichnisses in i einlesen und weiterverarbeiten.

Grüßle
oafish

Blackhawk
29-03-2004, 14:22
oder einfach ein


a=0
ls | while read line
do
a=$(expr $a +a)
mv $line $a
done


eventuell noch endungen anfuegen...