Hallo Leute, wie kann ich mehrere Dateien umbennen? Z.B. test.html, haus.html sollen dann test.php und haus.php heissen. Es gibt wohl ein Tool Namens mmv aber ich finde es niergends. Vielen Dank. Boris Höffgen
Hi! Am Samstag, 4. August 2001 11:03 schrieb B. Höffgen:
wie kann ich mehrere Dateien umbennen? Z.B. test.html, haus.html sollen dann test.php und haus.php heissen. Es gibt wohl ein Tool Namens mmv aber ich finde es niergends.
Wenn es dir reicht, dass die Dateien nacher "test.html.php" bzw. "haus.html.php" heißen, dann funktioniert folgendes: for i in *.htm*; do mv $i $i.php; done Gruß Thomas -- Thomas Föcking // Fachinformatiker Systemintegration in Ausbildung // Homepage: http://www.foecking.de // Linux-Top20: http://www.germantop20.de
On Sat, Aug 04, 2001 at 11:43:05AM +0200, Thomas Föcking wrote:
Wenn es dir reicht, dass die Dateien nacher "test.html.php" bzw. "haus.html.php" heißen, dann funktioniert folgendes:
for i in *.htm*; do mv $i $i.php; done
besser: for i in *.html; do mv $i `basename $i .html`.php; done Benennt a.html in a.php, bcd.html in bcd.php um usw. Rene -- Omnis enim res, | für Informationen über den quae dando non deficit, | Sinn und Bedeutung (Übersetung) dum habetur et non datur, | dieser Verse, eine Mail an nondum habetur, | mail@rene-engelhard.de mit quomodo habenda est. | Betreff: signature info [Aurelius Augustinus, 4.Jhd]
On Saturday, 4. August 2001 11:43, Thomas Föcking wrote:
Am Samstag, 4. August 2001 11:03 schrieb B. Höffgen:
wie kann ich mehrere Dateien umbennen? Z.B. test.html, haus.html sollen dann test.php und haus.php heissen. [...] Wenn es dir reicht, dass die Dateien nacher "test.html.php" bzw. "haus.html.php" heißen, dann funktioniert folgendes:
for i in *.htm*; do mv $i $i.php; done
Wenn es Dir nicht reicht, dann funktioniert folgendes: $ for i in *.htm*; do mv "$i" "${i%.htm*}.php"; done Das ${i%.htm*} ist allerdings bashspezifisch und AFAIK nicht portabel. Gruß, Stephan -- Stephan Hakuli | mailto: stephan@hakuli.de | * GnuPG/PGP-Key * | callto: 01 71 - 651 89 43 | available, please | surfto: http://www.hakuli.de | visit my homepage
Thomas Föcking wrote:
Wenn es dir reicht, dass die Dateien nacher "test.html.php" bzw. "haus.html.php" heißen, dann funktioniert folgendes:
for i in *.htm*; do mv $i $i.php; done
Mit for i in *.html; do mn $i `basename $i .html`.php; done lauten die Dateien "test.php" und "haus.php". Felix
"B. Höffgen" wrote:
wie kann ich mehrere Dateien umbennen? Z.B. test.html, haus.html sollen dann test.php und haus.php heissen. Es gibt wohl ein Tool Namens mmv aber ich finde es niergends.
Ist definitiv auf den SuSE CDs dabei, sogar in einem Paket, das den gleichen Namen traegt: "mmv". Musst Du nur installieren, ist bisher wahrscheinlich bei Dir nicht geschehen. Du koenntest auch einfach mal die Paketauskunft von YaST bemuehen, die sollte eigentlich das Paket bei einem entsprechenden Suchbegriff auch finden.....! SuSE 7.1: rpm -qf /usr/bin/mmv ==> mmv-1.01b-267 CU, Thomson -- Thomas Hertweck, Geophysicist Geophysical Institute, University of Karlsruhe Hertzstr. 16, D-76187 Karlsruhe, Germany
"B. Höffgen" wrote:
Hallo Leute,
wie kann ich mehrere Dateien umbennen? Z.B. test.html, haus.html sollen dann test.php und haus.php heissen.
Zur Not kannst du dir auch mit einem kleinen Shell-Script helfen. ... #!/bin/sh for ALT in `ls -1 /"<VERZEICHNIS> | grep .html" do NEU=`echo $ALT | sed -e s/".html"/".php"/ mv /"<VERZEICHNIS>"/$ALT /"<VERZEICHNIS>"/$NEU done ... -- Gruß Christoph
On Sam, 04 Aug 2001 at 13:10 (+0200), Christoph Glaubitz wrote:
"B. Höffgen" wrote:
wie kann ich mehrere Dateien umbennen? Z.B. test.html, haus.html sollen dann test.php und haus.php heissen.
Mal davon abgesehen, dass pro Woche mindestens ein Thread zu diesem Thema im Archiv zu finden sein dürfte ...
Zur Not kannst du dir auch mit einem kleinen Shell-Script helfen. ..
Hast Du das getestet? Ich nehme als Verzeichnis einfach mal /tmp an:
#!/bin/sh
for ALT in `ls -1 /"<VERZEICHNIS> | grep .html"
Hier dürfte die Meldung kommen (wenn am Zeilenende noch ein ` stehen würde): ls: /tmp | grep .html: No such file or directory Grund: Die "" sitzen falsch. Willst Du Leerzeichen in Dateinamen abfangen? Das geht so nicht (mit der for-Schleife AFAIK gar nicht). Die Option -1 hat IMHO in diesem Kontext keine Bedeutung (ich sehe zumindest keinen Unterschied). Der grep ist wohl überflüssig, Suchmuster kann ls (korrekt: die Shell) auch. Für Dateien ohne Leerzeichen geht: for ALT in `ls /tmp/*.html` Wenn Leerzeichen auftreten können, würde ich lieber so arbeiten: ls /tmp/*.html | while read ALT do ... done
do NEU=`echo $ALT | sed -e s/".html"/".php"/
Was willst Du hier wieder mit den ""? Die werden nicht benötigt. Die Ersetzung im sed ist nicht richtig. So wie geschrieben (wenn der ` am Zeilenende nicht fehlen würde ;-) wird z. B. datei_html.html zu datei_php.html. Besser (gleich noch mit den "" an der richtigen Stelle, um Leerzeichen abzufangen): NEU="`echo $ALT | sed s/\.html$/.php/`" Für weitere Infos siehe man 7 regex
mv /"<VERZEICHNIS>"/$ALT /"<VERZEICHNIS>"/$NEU done
Wieso stehen die "" da wieder an so komischen Stellen? Unklar. Das Verzeichnis muss nicht neu angegeben werden, das steht seit dem ls in ALT (also auch in NEU) mit drin. Besser: mv "$ALT" "$NEU" Mein üblicher Einwurf: Wie in den anderen vorgeschlagenen Scripts werden ggf. existierende Dateien gnadenlos überschrieben (wenn die Rechte stimmen). Sowas sollte man immer abfangen: test -f "$NEU" || mv "$ALT" "$NEU" Jan P.S.: Nein, ich tue dies nicht, um andere niederzumachen. Aber wenn offensichtlich fehlerhafte Scripts bzw. Script-Fragmente gepostet werden, sollte man zumindest erwähnen, dass sie ungetestet sind. Alternativ kann man sich auch die Arbeit machen und selber testen.Der Aufbau einer Umgebung dafür dauert ca. 20 Sekunden: cd /tmp mkdir html cd html
a.html b.html b.php "x y.html"
Fertig.
* Jan Trippler schrieb am 04.Aug.2001: [ls]
Die Option -1 hat IMHO in diesem Kontext keine Bedeutung (ich sehe zumindest keinen Unterschied).
ls unterscheidet, ob die Ausgabe auf einem Bildschirm erfolgt, oder in eine pipe bzw. Datei. Auf dem Bildschirm erhällt man die gewohnte Ausgabe, wenn ls woandershin ausgibt, dann gibt ls einen Dateinamen pro Zeile aus. Das ist meist das was gewollt ist. Will man das Verhalten wie auf dem Bildschirm erzwingen, so geht das mit -C, will man das Verhalten wie in eine Pipe erzwingen, so geht das mit -1. Die Farbausgabe ist vom -C unberührt, die muß noch mal gesondert eingestellt werden.
Der grep ist wohl überflüssig, Suchmuster kann ls (korrekt: die Shell) auch.
Allerdings nicht so schön wie grep. Im vorliegenden Fall ist es aber absolut überflüssig. Wenn nicht bitet es sich an, daß ganze mit file oder perl zu machen.
Mein üblicher Einwurf: Wie in den anderen vorgeschlagenen Scripts werden ggf. existierende Dateien gnadenlos überschrieben (wenn die Rechte stimmen). Sowas sollte man immer abfangen: test -f "$NEU" || mv "$ALT" "$NEU"
Und wenn man es nicht abfangen möchte, weil z.B eine schon existierende Datei nur überholt sein kann, dann soll man es auch sagen: mv -f $ALT $NEU Dann wird sicher überschrieben, falls man die Rechte dazu hat, und das ohne Rückfrage. Rückfragen machen sich aus einem Skript heraus meist nicht gut.
P.S.: Nein, ich tue dies nicht, um andere niederzumachen. Aber
Nein, natürlich soll keiner niedergemacht werden, aber man sollte schon schreiben wenn was nicht stimmt, oder wenn man meint, da gehört noch eine Ergänzung hinzu. So schreibe ich diese Mail hier am allerwenigsten für Jan, da ich mir recht Sicher bin, daß für ihm nichts neues dabei ist. Bernd -- Homepages von deutschsprachigen Linux-Gurus: Kristian Köhntopp: http://www.koehntopp.de/kris/artikel/ Sven Guckes: http://www.math.fu-berlin.de/~guckes/sven Robin S Socha: http://socha.net/index2.html |Zufallssignatur 10
participants (10)
-
B. Höffgen
-
B.Brodesser@t-online.de
-
Christian Hernmarck
-
Christoph Glaubitz
-
Felix E. Klee
-
Jan.Trippler@t-online.de
-
Rene Engelhard
-
Stephan Hakuli
-
Thomas Föcking
-
Thomas Hertweck