Hallo Liste. Möchte gerne meine Bilder umbenennen, und zwar so: img_1234.jpg => 2003-1234.jpg Folgendes funktioniert leider dann nicht, wenn im Pfadname ein Leerzeichen ist: # rename img_ 2003- `find . -name *.jpg` Folgendes funktioniert auch nicht: # rename img_ 2003- "`find . -name *.jpg`" Dann kommt der Hinweis, der Dateiname sei zu lang. Hat wer nen Tip? -- Andreas Feile www.feile.net
Andreas Feile schrieb:
Möchte gerne meine Bilder umbenennen, und zwar so:
img_1234.jpg => 2003-1234.jpg
Wieso schreibst Du etwas von Leerzeichen im Subject? Da scheinen IMHO keine Leerzeichen in Dateinamen vorzukommen.
Folgendes funktioniert leider dann nicht, wenn im Pfadname ein Leerzeichen ist:
# rename img_ 2003- `find . -name *.jpg`
Folgendes funktioniert auch nicht:
# rename img_ 2003- "`find . -name *.jpg`"
Dann kommt der Hinweis, der Dateiname sei zu lang.
Achso, Leerzeichen im Pfad. Hast Du also nicht alle Bilder in einem Verzeichnis? Solange die Dateinamen keine Leerzeichen haben, gehe doch einfach in das Verzeichnis mit den Bildern und fuehre ein for i in img*.jpg ; do mv -i $i ${i/#img\_/2003-} ; done aus. Das sollte es gewesen sein. Aber wie gesagt: das wird nur gehen, wenn die Dateinamen keine Leerzeichen haben. An- sonsten muss man etwas anders vorgehen. CU, Th.
Thomas Hertweck, Dienstag, 4. November 2003 13:35:
Achso, Leerzeichen im Pfad. Hast Du also nicht alle Bilder in einem Verzeichnis? Solange die Dateinamen keine Leerzeichen haben, gehe doch einfach in das Verzeichnis mit den Bildern und fuehre ein [...]
Es handelt sich um eine weitverzweigte Struktur, das händische wechseln ins jeweilige Verzeichnis ist daher höchst mühsam. Gibt es für die Kombination rename/find keine Möglichkeit, das Leerzeichen zu escapen, ohne daß dann die Befehlszeile zu lang wird? -- Andreas Feile www.feile.net
Hallo, Am Tue, 04 Nov 2003, Thomas Hertweck schrieb:
for i in img*.jpg ; do mv -i $i ${i/#img\_/2003-} ; done ^^ ^ ^ *autsch* Ohne quoten bekommst du bei der ersten Datei mit nem Leerzeichen in $i Aerger... Schreib du dir bitte doch auch mal hinter die Ohren, dass man fast nie zuviel, aber fast immer zuwenig quoten kann.
Also, wenn dann bitte: for f in img*.jpg; do mv -i "$f" "${f/#img\_/2003-}"; done Danke. -dnh -- Wie die Blumen in dem Garten - blüh'n hier Froschpilen aller Arten. Rote , Grüne , gelbe , Blaue - Lieber dag°ler komm und schaue. Denkt euch Ich hab'einen Kasper geseh'n Er lag auf nem eichtisch und konnte nicht geh'n [Woko° in dag°]
David Haller schrieb:
Am Tue, 04 Nov 2003, Thomas Hertweck schrieb:
for i in img*.jpg ; do mv -i $i ${i/#img\_/2003-} ; done ^^ ^ ^ *autsch* Ohne quoten bekommst du bei der ersten Datei mit nem Leerzeichen in $i Aerger... Schreib du dir bitte doch auch mal hinter die Ohren, dass man fast nie zuviel, aber fast immer zuwenig quoten kann.
Lies bitte nochmal meine Mail. Da stand klar und deutlich: "Aber wie gesagt: das wird nur gehen, wenn die Dateinamen keine Leerzeichen haben. Ansonsten muss man etwas anders vorgehen." Warum soll ich quoten, wenn ich weiss, dass meine Dateinamen keine Leerzeichen haben? Und das ist bei Andreas definitiv der Fall. Wenn ich so einen Befehl an der Kommandozeile mache, dann ist es kein Skript, was fuer die Ewigkeit geschrieben ist und unter allen Bedingungen funktionieren soll, sondern ein einfacher Befehl, der das macht, was ich momentan brauche. Wenn ich also so etwas vorschlage, dann weiss ich i.d.R. schon, was ich tue.
Also, wenn dann bitte:
for f in img*.jpg; do mv -i "$f" "${f/#img\_/2003-}"; done
Halte ich fuer unnoetig, wenn ich weiss, dass es keine Leer- zeichen gibt. Man kann es mit der "korrekten" Shell-Syntax auch uebertreiben. Gruesse, Th.
Hallo, Am Tue, 04 Nov 2003, Thomas Hertweck schrieb:
David Haller schrieb: [..]
Also, wenn dann bitte:
for f in img*.jpg; do mv -i "$f" "${f/#img\_/2003-}"; done
Halte ich fuer unnoetig, wenn ich weiss, dass es keine Leer- zeichen gibt. Man kann es mit der "korrekten" Shell-Syntax auch uebertreiben.
[ ] Du kannst dich darauf verlassen, was in $IFS steht Korrekt waere in deinem Fall: OLD_IFS="$IFS" IFS=" " ## "<space><tab><newline>" <hier befehl ohne quoting> IFS="$OLD_IFS" Kurzum: man will immer quoten, es sei denn man kann nicht (und das ist selten). -dnh -- Kaum wird man in dieser Gruppe mal ein bisschen Intelligent, schon sind alle verwirrt! [WoKo in dag°]
David Haller schrieb:
Am Tue, 04 Nov 2003, Thomas Hertweck schrieb:
David Haller schrieb: [..]
Also, wenn dann bitte:
for f in img*.jpg; do mv -i "$f" "${f/#img\_/2003-}"; done
Halte ich fuer unnoetig, wenn ich weiss, dass es keine Leer- zeichen gibt. Man kann es mit der "korrekten" Shell-Syntax auch uebertreiben.
[ ] Du kannst dich darauf verlassen, was in $IFS steht
Korrekt waere in deinem Fall:
OLD_IFS="$IFS" IFS=" " ## "<space><tab><newline>" <hier befehl ohne quoting> IFS="$OLD_IFS"
Kurzum: man will immer quoten, es sei denn man kann nicht (und das ist selten).
David, solche (Shell-)Spielchen kannst Du mit Jan machen, nicht aber mit mir :-)) Ich weiss, was mein $IFS ist und ich kenne mein System und ich quote genau dann, wenn es Sinn macht und nicht mehr... Wie schon gesagt: man kann alles uebertreiben. Ich hatte bisher noch nie Probleme mit meinen Skripten oder Shellbefehlen, und wir setzen hier neben Linux auch Irix, HP-UX und Solaris ein. Man muss sich eben anpassen. Ich nutze auch Bash-Features, wenn sie mir zur Verfuegung stehen auf dem System, wo ich gerade arbeite - warum sollte ich drauf verzichten, nur damit der Befehl, den ich gerade jetzt hier und momentan fuer eine Aufgabe brauche, portabel ist? Nee, Danke! ;-) Ich schrieb ja extra, dass es nur in diesem und jenem Fall funktioniert - ich hatte ja schon befuerchtet, dass darauf jemand anspringen wuerde. IMHO muss man da einfach mal ein bissl abwaegen, was _wirklich_ Sinn macht... Nichts fuer Ungut! Es ist echt gut, dass Du auf solche Feinheiten hinweist, aber nimm es mir nicht uebel, wenn ich das fuer ueber- trieben halte, wenn man genau weiss, was man fuer ein Problem zu loesen hat :-) Gruesse, Thomson
Hallo, Am Tue, 04 Nov 2003, Andreas Feile schrieb:
Möchte gerne meine Bilder umbenennen, und zwar so:
img_1234.jpg => 2003-1234.jpg
Folgendes funktioniert leider dann nicht, wenn im Pfadname ein Leerzeichen ist:
# rename img_ 2003- `find . -name *.jpg`
Du musst das *.jpg quoten, sonst expandiert das die shell schon, sofern auch nur ein .jpg im aktuellen Verz. ist, und bei mehreren wirft find dann einen Fehler weil es: find . -name 1.jpg 2.jpg zu sehen bekommt...
Folgendes funktioniert auch nicht:
# rename img_ 2003- "`find . -name *.jpg`"
Dann kommt der Hinweis, der Dateiname sei zu lang.
find . -name '*.jpg' | while read f; do \ mv -i "$f" "`echo \"$f\" | sed 's!/img_!/2003-!g'`"; \ done Das scheitert dann AFAIR nur an Zeilenumbruechen im Dateinamen oder Pfad. -dnh PS: Evtl. geht auch: find . -name '*.jpg' -print0 | xargs -0 rename img_ 2003- PPS: $ echo 'o l a ' | sed 's l h ' $ echo 'o l a ' | sed 'slh' obfuscated bash anyone? *kicher* -- Wenn dir irgendetwas fremdartig und umbekannt vorkommt, dann sei ganz beruhigt. Hier war nur Woko am Werk. [WoKo in dag°]
Am Dienstag, 4. November 2003 13:11 schrieb Andreas Feile:
Dann kommt der Hinweis, der Dateiname sei zu lang. Hat wer nen Tip?
darf ich Dir krename empfehlen ? :) http://www.krename.net -- www.stonki.de: the more I see, the more I know....... www.proftpd.de: Deutsche ProFTPD Dokumentation www.krename.net: Der Batch Renamer für KDE www.kbarcode.net: Die Barcode Solution für KDE
participants (5)
-
Andreas Feile
-
David Haller
-
Peter Wiersig
-
Stefan Onken
-
Thomas Hertweck