View previous topic :: View next topic |
Author |
Message |
widu Guru
Joined: 05 Jun 2004 Posts: 333 Location: Freiburg
|
Posted: Sun Apr 17, 2005 8:01 pm Post subject: wie sag ichs meiner bash? |
|
|
hi,
ich muß leider innerhalb eines Verzeichnisses (samt seiner Unterverzeichnisse) ca 600 Dateien umbenennen, genaugenommen die Endung von .php3 nach .php4 ändern. Daß ich wenig lust habe jede einzelne zu bearbeiten, versteht sich, nur leider versteh ich nicht genug von der bash um ihr mitzuteilen, daß sie das bitte für mich erledigen soll. kann mir da jemand hilfestellung leisten? _________________ nature is a heterosexual fiction |
|
Back to top |
|
|
schachti Advocate
Joined: 28 Jul 2003 Posts: 3765 Location: Gifhorn, Germany
|
Posted: Sun Apr 17, 2005 8:16 pm Post subject: |
|
|
Installiere Dir mmv, damit geht das. _________________ Never argue with an idiot. He brings you down to his level, then beats you with experience.
How-To: Daten verschlüsselt auf DVD speichern. |
|
Back to top |
|
|
psyqil Advocate
Joined: 26 May 2003 Posts: 2767
|
Posted: Sun Apr 17, 2005 8:18 pm Post subject: |
|
|
Code: | * sys-apps/rename
Latest version available: 1.3
Latest version installed: [ Not Installed ]
Size of downloaded files: 81 kB
Homepage: http://rename.berlios.de/
Description: tool for easily renaming files
License: GPL-2 | Hat 'nen "-R"-Switch! |
|
Back to top |
|
|
widu Guru
Joined: 05 Jun 2004 Posts: 333 Location: Freiburg
|
Posted: Sun Apr 17, 2005 8:19 pm Post subject: |
|
|
ich werds ausprobieren,danke. _________________ nature is a heterosexual fiction |
|
Back to top |
|
|
widu Guru
Joined: 05 Jun 2004 Posts: 333 Location: Freiburg
|
Posted: Sun Apr 17, 2005 8:35 pm Post subject: |
|
|
hat funktioniert. Danke nochmals. _________________ nature is a heterosexual fiction |
|
Back to top |
|
|
nes Apprentice
Joined: 10 Aug 2004 Posts: 155 Location: Vienna/Austria
|
Posted: Sun Apr 17, 2005 9:04 pm Post subject: |
|
|
Nur der Vollständigkeit halber, das da sollte es auch tun (im konkreten Fall ohne Unterverzeichnisse, die liesen sich aber auch ganz leicht einbringen)
Code: | #!/bin/sh
# Alle Dateien umbennen, die durch $3 - $n spezifiziert werden
# dabei wird der String $1 im Dateinamen durch $2 ersetzt,
# wobei auch regulaere Ausdruecke erlaubt sind
if [ $# -lt 3 ] ; then
echo 'Usage: ren <old string> <new string> files'
echo 'Example: ren foo bar *.foo renames all files'
echo ' *.foo ---> *.bar'
exit 1
fi
S1=$1 ; shift
S2=$1 ; shift
while [ $# -gt 0 ]; do
for OLDF in $1 ; do
NEWF=`echo $OLDF | sed -e "s/${S1}/${S2}/"`
if [ -f $NEWF ] ; then
echo "$NEWF exists, $OLDF not renamed"
else
echo "renaming $OLDF to $NEWF"
mv $OLDF $NEWF
fi
done
shift
done
|
lg., nes |
|
Back to top |
|
|
l3u Advocate
Joined: 26 Jan 2005 Posts: 2545 Location: Konradsreuth (Germany)
|
Posted: Sun Apr 17, 2005 9:18 pm Post subject: |
|
|
Ginge das nicht auch einfacher? Also nur mit einer einzigen Kommandozeile und ohne extra Programm? Ich hätte das jetzt so gemacht:
Code: | for i in `find | grep "php3$"`; do mv $i `echo "$i" | sed "s/php3$/php4/"`; done |
Wenn man will, kann man ja noch ein echo $i zwecks Fortschrittsanzeige mit reinschreiben oder sowas. Aber muß doch nicht mit Kanonen auf Spatzen schießen ;-) |
|
Back to top |
|
|
benjamin200 Veteran
Joined: 01 Feb 2004 Posts: 1426 Location: DE Munich
|
Posted: Sun Apr 17, 2005 9:46 pm Post subject: |
|
|
Quote: |
hat funktioniert. Danke nochmals.
|
hast du dich für mmv oder rename entschieden? Ich habe hier ein AMD64 System und rename läuft nur unstable, mit dem Syntax von mmv komme ich nicht so klar. Möchte auch mehrere Dateien indizieren.
Gruß,
Benjamin _________________ Gentoo Linux Stage1 / Kernel 2.6.18
AMD Athlon64 3500+ on Asus A8N-E / 1024 MB DDR-RAM / ATI X700 PCIe
Take LINUX and forget Blue Screens |
|
Back to top |
|
|
psyqil Advocate
Joined: 26 May 2003 Posts: 2767
|
Posted: Sun Apr 17, 2005 9:46 pm Post subject: |
|
|
Sind grep, mv und sed etwa keine Extraprogramme? |
|
Back to top |
|
|
schachti Advocate
Joined: 28 Jul 2003 Posts: 3765 Location: Gifhorn, Germany
|
Posted: Mon Apr 18, 2005 7:10 am Post subject: |
|
|
Libby wrote: |
Ginge das nicht auch einfacher? Also nur mit einer einzigen Kommandozeile und ohne extra Programm? Ich hätte das jetzt so gemacht:
Code: | for i in `find | grep "php3$"`; do mv $i `echo "$i" | sed "s/php3$/php4/"`; done |
Wenn man will, kann man ja noch ein echo $i zwecks Fortschrittsanzeige mit reinschreiben oder sowas. Aber muß doch nicht mit Kanonen auf Spatzen schießen
|
Wenn ich mich recht erinnere, gibt das Probleme, wenn die Dateinamen Leerzeichen enthalten. Da jedes white space als field separator zaehlt, zerlegt Dir das for i in diese Dateinamen in die einzelnen Worte... _________________ Never argue with an idiot. He brings you down to his level, then beats you with experience.
How-To: Daten verschlüsselt auf DVD speichern. |
|
Back to top |
|
|
schachti Advocate
Joined: 28 Jul 2003 Posts: 3765 Location: Gifhorn, Germany
|
Posted: Mon Apr 18, 2005 7:12 am Post subject: |
|
|
benjamin200 wrote: |
mit dem Syntax von mmv komme ich nicht so klar.
|
Ist ganz einfach:
Code: |
mmv "*.php3" "#1.php4"
|
sollte das gewuenschte tun. Grundidee von mmv: #1, #2, #3, #4 usw. stehen gerade fuer den Text, auf den das erste *, das zweite *, das dritte * usw. matchen. _________________ Never argue with an idiot. He brings you down to his level, then beats you with experience.
How-To: Daten verschlüsselt auf DVD speichern. |
|
Back to top |
|
|
l3u Advocate
Joined: 26 Jan 2005 Posts: 2545 Location: Konradsreuth (Germany)
|
Posted: Mon Apr 18, 2005 11:29 am Post subject: |
|
|
@psyqil: Naja, mv, grep und sed als "Extra-Programme" zu bezeichnen, geht ein bißchen weit, oder? Dann wär ja die Software im Bios oder auf dem Mainboard oder was weiß ich wo, die dafür sorgt, daß ich gerade was mit der Tastatut schreiben muß auch ein Extra-Programm ;-)
Mit extra-Programm hab ich gemeint, daß man zusätzlich Software installieren muß. Und man muß _defibnitiv_ kein "emerge mv grep sed find" machen (find als extra Programm hast du vergessen *g*), bevor die Kommandozeile funktioniert! Ich mein ja bloß: wozu extra Scripts und Programme installieren, wenn man's mit einer Zeile bash genauso machen kann? :-)
@schachti: Klar wird jedes Leerzeichen als Separator gezählt! Da es sich aber um php-Dateien handelt (.php3 und so Kram ist übrigens depreceated!), geh ich ja mal stark davon aus, daß diese Dateien auf einem Server liegen und keine Leerzeichen im Dateinamen haben! |
|
Back to top |
|
|
schachti Advocate
Joined: 28 Jul 2003 Posts: 3765 Location: Gifhorn, Germany
|
Posted: Mon Apr 18, 2005 11:32 am Post subject: |
|
|
Libby wrote: |
@schachti: Klar wird jedes Leerzeichen als Separator gezählt! Da es sich aber um php-Dateien handelt (.php3 und so Kram ist übrigens depreceated!), geh ich ja mal stark davon aus, daß diese Dateien auf einem Server liegen und keine Leerzeichen im Dateinamen haben!
|
Naja, das mag in einigen speziellen Fällen zutreffen - aber jemand, der im Nachhinein diesen Thread liest und das mit seinen Urlaubsbildern oder seiner mp3-Sammlung probiert... _________________ Never argue with an idiot. He brings you down to his level, then beats you with experience.
How-To: Daten verschlüsselt auf DVD speichern. |
|
Back to top |
|
|
benjamin200 Veteran
Joined: 01 Feb 2004 Posts: 1426 Location: DE Munich
|
Posted: Mon Apr 18, 2005 12:14 pm Post subject: |
|
|
schachti schrieb:
Quote: |
Ist ganz einfach:
Code:
mmv "*.php3" "#1.php4"
sollte das gewuenschte tun. Grundidee von mmv: #1, #2, #3, #4 usw. stehen gerade fuer den Text, auf den das erste *, das zweite *, das dritte * usw. matchen.
|
Wandelt alle *.php3 in *.php4 um, richtig?
schachti schrieb:
Quote: |
Naja, das mag in einigen speziellen Fällen zutreffen - aber jemand, der im Nachhinein diesen Thread liest und das mit seinen Urlaubsbildern oder seiner mp3-Sammlung probiert...
|
Genau das ist mein Szenario. Ich möchte die Fotos von meiner Digicam, welche ich mit Digikam (Paket) runterlade automatisch umbennen. Die Struktur sieht so aus.
Nach Download:
Code: |
# ls /digicam-download
DSC000001.jpg
DSC000002.jpg
DSC000003.jpg
DSC000004.jpg
DSC000005.jpg
DSC000006.jpg
usw.
usw.
|
Im Foto-Verzeichnis habe ich diese folgendermaßen strukturiert:
Code: |
# ls /digicam-verzeichnis
...
...
Foto-0002367.jpg
Foto-0002368.jpg
Foto-0002369.jpg
Foto-0002370.jpg
Foto-0002371.jpg
Foto-0002372.jpg
Foto-0002373.jpg
Foto-0002374.jpg
|
Wie kann ich jetzt die Dateien in /digicam-download per Kommando indizieren lassen, so das die Dateien aufsteigend umbenannt werden, beginnend mit 2375 und dem richtigen Datennamen + Endung (Foto-0002375.jpg). Kann mir hierfür jemand den Syntax und das Tool nennen?
Gruß
Benjamin _________________ Gentoo Linux Stage1 / Kernel 2.6.18
AMD Athlon64 3500+ on Asus A8N-E / 1024 MB DDR-RAM / ATI X700 PCIe
Take LINUX and forget Blue Screens |
|
Back to top |
|
|
Deever Veteran
Joined: 06 Jul 2002 Posts: 1354 Location: Zürich / Switzerland
|
Posted: Mon Apr 18, 2005 12:35 pm Post subject: |
|
|
Code: | $ emerge zsh
$ zsh
$ for i (**/*.php3) mv "$i" "${i/php3/php4}" | Wobei mmv hier auch ganz gut einsetzbar ist.
Ach ja, hab ich auf diesem Forum schon erwähnt, daß die bash Müll ist?
Gruß,
/dev |
|
Back to top |
|
|
Aldo Guru
Joined: 15 Jan 2003 Posts: 440 Location: Cologne, Germany
|
Posted: Mon Apr 18, 2005 12:41 pm Post subject: |
|
|
schachti wrote: | Wenn ich mich recht erinnere, gibt das Probleme, wenn die Dateinamen Leerzeichen enthalten. Da jedes white space als field separator zaehlt, zerlegt Dir das for i in diese Dateinamen in die einzelnen Worte... |
Dann füge in dein Script ein: Code: |
#!/bin/bash
IFS="
"
...
|
_________________ Abit A-N78-HD
Phenom 9750
8 GB Ram
Linux 2.6.29-gentoo
FreeBSD 7.2 |
|
Back to top |
|
|
Deever Veteran
Joined: 06 Jul 2002 Posts: 1354 Location: Zürich / Switzerland
|
Posted: Mon Apr 18, 2005 1:52 pm Post subject: |
|
|
Aldo wrote: | Dann füge in dein Script ein: Code: |
#!/bin/bash
IFS="
"
...
|
| Genial!
Danke && Gruß,
/dev |
|
Back to top |
|
|
benjamin200 Veteran
Joined: 01 Feb 2004 Posts: 1426 Location: DE Munich
|
Posted: Mon Apr 18, 2005 3:49 pm Post subject: |
|
|
benjamin200 schrieb:
Quote: |
schachti schrieb:
Quote:
Ist ganz einfach:
Code:
mmv "*.php3" "#1.php4"
sollte das gewuenschte tun. Grundidee von mmv: #1, #2, #3, #4 usw. stehen gerade fuer den Text, auf den das erste *, das zweite *, das dritte * usw. matchen.
Wandelt alle *.php3 in *.php4 um, richtig?
schachti schrieb:
Quote:
Naja, das mag in einigen speziellen Fällen zutreffen - aber jemand, der im Nachhinein diesen Thread liest und das mit seinen Urlaubsbildern oder seiner mp3-Sammlung probiert...
Genau das ist mein Szenario. Ich möchte die Fotos von meiner Digicam, welche ich mit Digikam (Paket) runterlade automatisch umbennen. Die Struktur sieht so aus.
Nach Download:
Code:
# ls /digicam-download
DSC000001.jpg
DSC000002.jpg
DSC000003.jpg
DSC000004.jpg
DSC000005.jpg
DSC000006.jpg
usw.
usw.
Im Foto-Verzeichnis habe ich diese folgendermaßen strukturiert:
Code:
# ls /digicam-verzeichnis
...
...
Foto-0002367.jpg
Foto-0002368.jpg
Foto-0002369.jpg
Foto-0002370.jpg
Foto-0002371.jpg
Foto-0002372.jpg
Foto-0002373.jpg
Foto-0002374.jpg
Wie kann ich jetzt die Dateien in /digicam-download per Kommando indizieren lassen, so das die Dateien aufsteigend umbenannt werden, beginnend mit 2375 und dem richtigen Datennamen + Endung (Foto-0002375.jpg). Kann mir hierfür jemand den Syntax und das Tool nennen?
Gruß
Benjamin
|
Kann jemand weiterhelfen?
Gruß,
Benjamin _________________ Gentoo Linux Stage1 / Kernel 2.6.18
AMD Athlon64 3500+ on Asus A8N-E / 1024 MB DDR-RAM / ATI X700 PCIe
Take LINUX and forget Blue Screens |
|
Back to top |
|
|
calvin-gr Tux's lil' helper
Joined: 25 Sep 2004 Posts: 94 Location: Germany
|
Posted: Mon Apr 18, 2005 3:55 pm Post subject: |
|
|
mit perl könnte man dies auch sehr gut machen. _________________ Apfelmus schmeckt gut! |
|
Back to top |
|
|
schachti Advocate
Joined: 28 Jul 2003 Posts: 3765 Location: Gifhorn, Germany
|
Posted: Mon Apr 18, 2005 5:53 pm Post subject: |
|
|
Evtl. klappt das mit der Lösung von Libby, wenn Du zusätzlich noch einen Counter einbaust - den initialisiertst Du vor dem for mit dem gewünschten Startwert, inkrementierst ihn in der Schleife und benutzt ihn für die Generierung des neuen Dateinamens. Hab' leider gerade keine Zeit, sonst würde ich es direkt basteln... _________________ Never argue with an idiot. He brings you down to his level, then beats you with experience.
How-To: Daten verschlüsselt auf DVD speichern. |
|
Back to top |
|
|
|