Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
wie sag ichs meiner bash?
View unanswered posts
View posts from last 24 hours
View posts from last 7 days

 
Reply to topic    Gentoo Forums Forum Index Deutsches Forum (German)
View previous topic :: View next topic  
Author Message
widu
Guru
Guru


Joined: 05 Jun 2004
Posts: 333
Location: Freiburg

PostPosted: Sun Apr 17, 2005 8:01 pm    Post subject: wie sag ichs meiner bash? Reply with quote

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
View user's profile Send private message
schachti
Advocate
Advocate


Joined: 28 Jul 2003
Posts: 3765
Location: Gifhorn, Germany

PostPosted: Sun Apr 17, 2005 8:16 pm    Post subject: Reply with quote

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
View user's profile Send private message
psyqil
Advocate
Advocate


Joined: 26 May 2003
Posts: 2767

PostPosted: Sun Apr 17, 2005 8:18 pm    Post subject: Reply with quote

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! :P
Back to top
View user's profile Send private message
widu
Guru
Guru


Joined: 05 Jun 2004
Posts: 333
Location: Freiburg

PostPosted: Sun Apr 17, 2005 8:19 pm    Post subject: Reply with quote

ich werds ausprobieren,danke.
_________________
nature is a heterosexual fiction
Back to top
View user's profile Send private message
widu
Guru
Guru


Joined: 05 Jun 2004
Posts: 333
Location: Freiburg

PostPosted: Sun Apr 17, 2005 8:35 pm    Post subject: Reply with quote

hat funktioniert. Danke nochmals.
_________________
nature is a heterosexual fiction
Back to top
View user's profile Send private message
nes
Apprentice
Apprentice


Joined: 10 Aug 2004
Posts: 155
Location: Vienna/Austria

PostPosted: Sun Apr 17, 2005 9:04 pm    Post subject: Reply with quote

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
View user's profile Send private message
l3u
Advocate
Advocate


Joined: 26 Jan 2005
Posts: 2545
Location: Konradsreuth (Germany)

PostPosted: Sun Apr 17, 2005 9:18 pm    Post subject: Reply with quote

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
View user's profile Send private message
benjamin200
Veteran
Veteran


Joined: 01 Feb 2004
Posts: 1426
Location: DE Munich

PostPosted: Sun Apr 17, 2005 9:46 pm    Post subject: Reply with quote

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
View user's profile Send private message
psyqil
Advocate
Advocate


Joined: 26 May 2003
Posts: 2767

PostPosted: Sun Apr 17, 2005 9:46 pm    Post subject: Reply with quote

Sind grep, mv und sed etwa keine Extraprogramme? :twisted:
Back to top
View user's profile Send private message
schachti
Advocate
Advocate


Joined: 28 Jul 2003
Posts: 3765
Location: Gifhorn, Germany

PostPosted: Mon Apr 18, 2005 7:10 am    Post subject: Reply with quote

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
View user's profile Send private message
schachti
Advocate
Advocate


Joined: 28 Jul 2003
Posts: 3765
Location: Gifhorn, Germany

PostPosted: Mon Apr 18, 2005 7:12 am    Post subject: Reply with quote

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
View user's profile Send private message
l3u
Advocate
Advocate


Joined: 26 Jan 2005
Posts: 2545
Location: Konradsreuth (Germany)

PostPosted: Mon Apr 18, 2005 11:29 am    Post subject: Reply with quote

@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
View user's profile Send private message
schachti
Advocate
Advocate


Joined: 28 Jul 2003
Posts: 3765
Location: Gifhorn, Germany

PostPosted: Mon Apr 18, 2005 11:32 am    Post subject: Reply with quote

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
View user's profile Send private message
benjamin200
Veteran
Veteran


Joined: 01 Feb 2004
Posts: 1426
Location: DE Munich

PostPosted: Mon Apr 18, 2005 12:14 pm    Post subject: Reply with 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
_________________
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
View user's profile Send private message
Deever
Veteran
Veteran


Joined: 06 Jul 2002
Posts: 1354
Location: Zürich / Switzerland

PostPosted: Mon Apr 18, 2005 12:35 pm    Post subject: Reply with quote

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
View user's profile Send private message
Aldo
Guru
Guru


Joined: 15 Jan 2003
Posts: 440
Location: Cologne, Germany

PostPosted: Mon Apr 18, 2005 12:41 pm    Post subject: Reply with quote

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
View user's profile Send private message
Deever
Veteran
Veteran


Joined: 06 Jul 2002
Posts: 1354
Location: Zürich / Switzerland

PostPosted: Mon Apr 18, 2005 1:52 pm    Post subject: Reply with quote

Aldo wrote:
Dann füge in dein Script ein:
Code:

#!/bin/bash
IFS="
"

...
Genial! :)

Danke && Gruß,
/dev
Back to top
View user's profile Send private message
benjamin200
Veteran
Veteran


Joined: 01 Feb 2004
Posts: 1426
Location: DE Munich

PostPosted: Mon Apr 18, 2005 3:49 pm    Post subject: Reply with quote

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
View user's profile Send private message
calvin-gr
Tux's lil' helper
Tux's lil' helper


Joined: 25 Sep 2004
Posts: 94
Location: Germany

PostPosted: Mon Apr 18, 2005 3:55 pm    Post subject: Reply with quote

mit perl könnte man dies auch sehr gut machen.
_________________
Apfelmus schmeckt gut!
Back to top
View user's profile Send private message
schachti
Advocate
Advocate


Joined: 28 Jul 2003
Posts: 3765
Location: Gifhorn, Germany

PostPosted: Mon Apr 18, 2005 5:53 pm    Post subject: Reply with quote

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
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index Deutsches Forum (German) All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum