Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Dateinamen en bloc ändern

6 views
Skip to first unread message

Andreas Schmidt

unread,
May 12, 2002, 10:03:55 AM5/12/02
to
Hallo,

wie kann ich in einer Schleife alle Dateinamen umbenennen, so dass jeweils
ein Teilstring rausgenommen wird?

01 - Entführung aus dem Serail.WAV.mp3
02 - Double Quartet in F.WAV.mp3
03 - Symphony No. 40.WAV.mp3
04 - Lullabies.WAV.mp3

Ich will das ".WAV" rausnehmen...

Möglichst auch rekursiv in allen Unterordnern. Ich glaube, die Blanks
machen auch Probleme, oder?

Geht das mit einem Shell-Skript? Oder muss ich da doch zu Perl greifen?

Danke! Andi.

Lars Klemstein

unread,
May 12, 2002, 10:56:30 AM5/12/02
to
Andreas Schmidt wrote:
[...]

> Ich will das ".WAV" rausnehmen...
>
> Möglichst auch rekursiv in allen Unterordnern. Ich glaube, die Blanks
> machen auch Probleme, oder?

als Ansatz:

#!/bin/ksh

find . -type f -name "*WAV.mp3" -print | while read file
do
mv -v "$file" "${file:%.WAV.mp3}.mp3"
done


Gruß,

Lars

Gunnar Ritter

unread,
May 12, 2002, 11:14:08 AM5/12/02
to
Lars Klemstein <Lars.Kl...@t-online.de> wrote:

> Andreas Schmidt wrote:
> [...]
>> Ich will das ".WAV" rausnehmen...
>> Möglichst auch rekursiv in allen Unterordnern. Ich glaube, die Blanks
>> machen auch Probleme, oder?

Nimm bitte Google. Es wurde hier schon mehrfach ausführlich
besprochen, wie man das richtig macht. Wenn Du noch eine
weiterführende Frage haben solltest, wird man sie Dir gerne
beantworten.

> als Ansatz:

<http://omnibus.ruf.uni-freiburg.de/~gritter/usenet.html#halbfertig>

> find . -type f -name "*WAV.mp3" -print | while read file

Altbekannter, mehrfach diskutierter Fehler, der u.U. die Sicherheit
des Systems gefährden kann.

> do
> mv -v "$file" "${file:%.WAV.mp3}.mp3"
> done

$ mv -v
mv: illegal option -- v
mv: Insufficient arguments (0)
Usage: mv [-f] [-i] f1 f2
mv [-f] [-i] f1 ... fn d1
mv [-f] [-i] d1 d2
$

Außerdem paßt das Replacement-Pattern nicht zum Suchstring, was
zu falschen Umbenennungen führen kann.

Das sollte Dir jetzt ziemlich peinlich sein, Lars, daß Du so
einen Schrottcode gepostet hast.

Gunnar

--
http://omnibus.ruf.uni-freiburg.de/~gritter/usenet.html

Andreas Schmidt

unread,
May 12, 2002, 1:15:53 PM5/12/02
to
Gunnar Ritter wrote:

> Das sollte Dir jetzt ziemlich peinlich sein, Lars, daß Du so
> einen Schrottcode gepostet hast.

Ich bin neu in dieser NG, habe mir praktisch außer diesem Thread noch
nichts durchgelesen, aber ein Ton herrscht hier... ist ja schlimmer als in
de.comp.text.tex....

Aber dann werde ich wohl mal googeln, um mein Problem zu lösen.

Andi.

Robin S. Socha

unread,
May 12, 2002, 3:51:27 PM5/12/02
to
* Andreas Schmidt <schmid...@gmx.de> writes:

> Ich bin neu in dieser NG, habe mir praktisch außer diesem Thread noch
> nichts durchgelesen,

Selbst Schuld. jargon lurk

> aber ein Ton herrscht hier... ist ja schlimmer als in de.comp.text.tex....

Die Qualität der Antworten hier ist dementsprechend auch noch höher als
in dctt.

> Aber dann werde ich wohl mal googeln, um mein Problem zu lösen.

Wenn Du das direkt gemacht hättest. basename und mmv gibt es auch bei Dir.

Juergen Salk

unread,
May 12, 2002, 5:39:49 PM5/12/02
to
Robin S. Socha <robin-dated-10...@socha.net> wrote:

> Die Qualität der Antworten hier ist dementsprechend auch noch höher
> als in dctt.

> ...


> mmv gibt es auch bei Dir.

Womit bewiesen ist, dass es auch Ausnahmen von der Regel gibt.

Beste Grüsse - Jürgen

Felix von Leitner

unread,
May 12, 2002, 5:13:37 PM5/12/02
to
Thus spake Andreas Schmidt (schmid...@gmx.de):

> Ich bin neu in dieser NG, habe mir praktisch außer diesem Thread noch
> nichts durchgelesen,

Wie kommst du denn darauf, hier Müll zu posten, wenn du vorher nicht
mindestens eine Woche gelurkt hast?

Selbst mit so einfachen Regeln sind GMX-Luser heutzutage überfordert?

Unglaublich. [x] Eignungstest für Email-Adressen jetzt!

jsaul

unread,
May 12, 2002, 6:24:00 PM5/12/02
to
Andreas Schmidt <schmid...@gmx.de> wrote:

> wie kann ich in einer Schleife alle Dateinamen umbenennen, so dass
> jeweils ein Teilstring rausgenommen wird?
>

> Möglichst auch rekursiv in allen Unterordnern. Ich glaube, die Blanks
> machen auch Probleme, oder?

So ist's. Das heißt, wenn man's richtig macht natürlich nicht. ;-)

> Geht das mit einem Shell-Skript? Oder muss ich da doch zu Perl
> greifen?

Selbstverständlich geht das. Und das wurde hier ja auch, ähemm, bis zum
Abwinken durchdiskutiert. Du könntest dir beispielsweise mal
<7ofgaa...@jsaul.de> ansehen. Als Anregung, das musst du lediglich
an deine (wesentlich einfachere) Situation noch anpassen.

Gruß, jsaul
--
boozaba? zoo!

Andreas Schmidt

unread,
May 12, 2002, 6:36:36 PM5/12/02
to
Felix von Leitner wrote:

> Wie kommst du denn darauf, hier Müll zu posten, wenn du vorher nicht
> mindestens eine Woche gelurkt hast?
>
> Selbst mit so einfachen Regeln sind GMX-Luser heutzutage überfordert?
>
> Unglaublich.  [x] Eignungstest für Email-Adressen jetzt!

Mit solchen aggressiven Sprüchen hebst du aber garantiert nicht das
Diskussionsniveau. Ich kann ja verstehen, wenn du lieber eine
Expertenrunde veranstalten willst, ohne Newbies, aber ein entsprechender
Hinweis oder ein Verweis auf die FAQ oder ein früheres Posting hätten
eigentlich schon gereicht.

MfG, Andi.

Helmut Hullen

unread,
May 13, 2002, 1:12:00 AM5/13/02
to
Hallo, Andreas,

Du (schmidt.2002) meintest am 13.05.02:

> aber ein
> entsprechender Hinweis oder ein Verweis auf die FAQ oder ein
> früheres Posting hätten eigentlich schon gereicht.

Ist doch schon mehrfach erschienen. Soll Felix das rezitieren?

Ach ja: welche "FAQ"?

"follow up" gesetzt auf de.alt.gruppenkasper

Viele Gruesse!
Helmut

Andreas Schmidt

unread,
May 13, 2002, 4:14:49 AM5/13/02
to
Helmut Hullen wrote:

> Ach ja: welche "FAQ"?
>
> "follow up" gesetzt auf de.alt.gruppenkasper

Ihr habt nicht mal eine FAQ?

Beschreibung auf Kaspergruppe gesetzt.

Andi.

Friedhelm Waitzmann

unread,
May 13, 2002, 2:38:13 PM5/13/02
to
jsaul <js...@gmx.de> hat geschrieben:

>Du könntest dir beispielsweise mal
><7ofgaa...@jsaul.de> ansehen. Als Anregung, das musst du lediglich
>an deine (wesentlich einfachere) Situation noch anpassen.

In <7ofgaa...@jsaul.de> steht so etwas wie

find ... -print | umformer | \
while read -r alt; read -r neu
do
mv "$alt" "$neu"
done

wobei `umformer' eine Zeile - das soll jeweils ein Dateipfad
sein - einliest und diese Zeile, ein newline, den neuen Dateipfad
und ein newline ausgibt.

Wie oft muss man es noch schreiben:

Wenn man mittels von `find' die gefundenen Dateipfade mittels
`find ... -print' ausgeben laesst, hat man schon verloren, weil
Newline-Zeichen, die in Dateinamen auftreten, nicht von denen
unterscheidbar sind, die find zwischen den einzelnen Pfaden
ausgibt.

Friedhelm Waitzmann

unread,
May 13, 2002, 3:27:57 PM5/13/02
to
jsaul <js...@gmx.de> hat geschrieben:

>Du könntest dir beispielsweise mal
><7ofgaa...@jsaul.de> ansehen. Als Anregung, das musst du lediglich
>an deine (wesentlich einfachere) Situation noch anpassen.

In <7ofgaa...@jsaul.de> steht so etwas wie

find ... -print | umformer | \
while read -r alt; read -r neu
do
mv "$alt" "$neu"
done

wobei `umformer' eine Zeile - das soll jeweils ein Dateipfad
sein - einliest und diese Zeile, ein newline, den neuen Dateipfad
und ein newline ausgibt.

Wie oft muss man es noch schreiben:

Wenn man mittels von `find' die gefundenen Dateipfade mittels
`find ... -print' ausgeben laesst, hat man schon verloren, weil
Newline-Zeichen, die in Dateinamen auftreten, nicht von denen
unterscheidbar sind, die find zwischen den einzelnen Pfaden
ausgibt.

Besser so:

find ... -exec sh -c \
'neu="`expr "$1" : '\''\(.*)\.WAV\.mpg$'\''`.mpg"
exec mv -- "$1" "$neu"' sh '{}' ';'

(Ich gebe dem Shell hier den zusaetzlichen Parameter `sh', weil
ich schon eines erlebt habe, was bei dem Aufruf

sh -c '...' -dateiname-der-mit-Minus-beginnt

als Loginshell startet.)

Friedhelm Waitzmann

unread,
May 13, 2002, 3:33:08 PM5/13/02
to
jsaul <js...@gmx.de> hat geschrieben:

>Du könntest dir beispielsweise mal
><7ofgaa...@jsaul.de> ansehen. Als Anregung, das musst du lediglich
>an deine (wesentlich einfachere) Situation noch anpassen.

In <7ofgaa...@jsaul.de> steht so etwas wie

find ... -print | umformer | \
while read -r alt; read -r neu
do
mv "$alt" "$neu"
done

wobei `umformer' eine Zeile - das soll jeweils ein Dateipfad
sein - einliest und diese Zeile, ein newline, den neuen Dateipfad
und ein newline ausgibt.

Wie oft muss man es noch schreiben:

Wenn man mit `find ... -print' die Dateipfade finden und ausgeben

Juergen Salk

unread,
May 13, 2002, 7:38:22 PM5/13/02
to
Friedhelm Waitzmann <Friedhelm...@web.de> wrote:

> 'neu="`expr "$1" : '\''\(.*)\.WAV\.mpg$'\''`.mpg"

^
Ich will ja nicht kleinlich sein, aber da fehlt wohl noch ein »\«.

Beste Grüsse - Jürgen

Juergen P. Meier

unread,
May 14, 2002, 1:07:30 AM5/14/02
to

Du bist so Daemlich das du dich nichtmal in de.newusers.info
ueber den Umgang mit dem Medium Usenet auseinandergesetzt hast,
*BEVOR* du hier Scheiesse postest?

Geh Sterben, jetzt.
Und mach das bitte ohne deinen Usenetzugang weiterhin zu misbrauchen.

fup2dag nochmals gesetzt, obwohl dieser Idiot wohl zu daemlich dafuer
ist.... - PS: *plonk*
Juergen
--
J...@lrz.fh-muenchen.de - "This World is about to be Destroyed!"
begin eicar.com
X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*
end

jsaul

unread,
May 14, 2002, 3:14:23 AM5/14/02
to
Friedhelm Waitzmann <Friedhelm...@web.de> wrote:

> In <7ofgaa...@jsaul.de> steht so etwas wie
>
> find ... -print | umformer | \
> while read -r alt; read -r neu
> do
> mv "$alt" "$neu"
> done
>
> wobei `umformer' eine Zeile - das soll jeweils ein Dateipfad
> sein - einliest und diese Zeile, ein newline, den neuen Dateipfad
> und ein newline ausgibt.
>
> Wie oft muss man es noch schreiben:

^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^


>
> Wenn man mit `find ... -print' die Dateipfade finden und ausgeben
> laesst, hat man schon verloren, weil Newline-Zeichen, die in
> Dateinamen auftreten, nicht von denen unterscheidbar sind, die
> find zwischen den einzelnen Pfaden ausgibt.

Wieso schreibst *du* es denn dann noch mal? Steht doch in dem von dir
"zitierten" Posting <7ofgaa...@jsaul.de> klipp und klar drin:

Das sollte für alle Pfad- und Dateinamen funktionieren, außer
natürlich bei solchen, die Zeilenumbrüche enthalten. Aber letztere
will man eh nicht haben, geschweige denn umbenennen, d.h. sofern
überhaupt nötig schon mit »find« rausfiltern und sich eine Warnung
ausgeben lassen.

Du darfst natürlich deinen MP3's auch Namen mit Zeilenumbrüchen geben,
da hält dich niemand von ab...

find ... -name '*
*' -exec sh -c 'echo >&2 "Datei ignoriert: $1"' -- {} \; \
-o -name '*.mp3' -print

ist dagegen eine Möglichkeit zur Absicherung.

> Besser so:
>
> find ... -exec sh -c \
> 'neu="`expr "$1" : '\''\(.*)\.WAV\.mpg$'\''`.mpg"
> exec mv -- "$1" "$neu"' sh '{}' ';'

Wirklich hübsch. Gratulation! So allerdings falsch. Das hättest du
evtl. vermeiden können, wenn du statt »sh -c ...« aufzurufen den Kram
in ein externes Shell-Skript geschrieben hättest. Was das Ganze aber
auch nicht schneller macht.

> (Ich gebe dem Shell hier den zusaetzlichen Parameter `sh', weil
> ich schon eines erlebt habe, was bei dem Aufruf
>
> sh -c '...' -dateiname-der-mit-Minus-beginnt
>
> als Loginshell startet.)

Hierfür bitte Beispiel angeben.

Friedhelm Waitzmann

unread,
May 14, 2002, 9:56:01 AM5/14/02
to
Juergen Salk <juerge...@gmx.de> hat geschrieben:
>Friedhelm Waitzmann <Friedhelm...@web.de> wrote:

>> 'neu="`expr "$1" : '\''\(.*)\.WAV\.mpg$'\''`.mpg"
> ^
>Ich will ja nicht kleinlich sein, aber da fehlt wohl noch ein »\«.

Ja, da hast Du recht.

Friedhelm Waitzmann

unread,
May 14, 2002, 10:37:58 AM5/14/02
to
Juergen Salk <juerge...@gmx.de> hat geschrieben:
>Friedhelm Waitzmann <Friedhelm...@web.de> wrote:

>> 'neu="`expr "$1" : '\''\(.*)\.WAV\.mpg$'\''`.mpg"
> ^
>Ich will ja nicht kleinlich sein, aber da fehlt wohl noch ein »\«.

Ja, leider.

Und noch ein weiteres Problem: Wenn "$1" beispielsweise die
Zeichenkette `(' ist, interpretiert sie expr als Klammerung
( ... ). Umgehen lässt sich das so:

'neu="`expr "x$1" : '\''x\(.*\)\.WAV\.mpg$'\''`.mpg"

Sven Mascheck

unread,
May 15, 2002, 5:56:43 AM5/15/02
to
Friedhelm Waitzmann <Friedhelm...@web.de> wrote:

> [...] weil ich schon eines erlebt habe, was bei dem Aufruf


> sh -c '...' -dateiname-der-mit-Minus-beginnt
> als Loginshell startet

Fast alle Bourne Shells betrachten sich hierbei als Login-Shell
(es wird an der entsprechenden Stelle fälschlicherweise $0 statt
argv[0] geprüft), was vor allem die Abarbeitung der Profiles zur
Folge hat.

In ganz wenigen Fällen (z.B. SunOS 4, -5.7, SINIX 5.20) bekommt
man dann sogar eine interaktive Shell.

Als Ausnahmen kenne ich bisher nur SunOS 5.8 (erstes Argument
wird $0) und HP-UX seit spätestens 8.07 (argv[0] wird $0).

Sven

Sven Mascheck

unread,
May 15, 2002, 5:58:51 AM5/15/02
to
Friedhelm Waitzmann <Friedhelm...@web.de> wrote:

> [...] weil ich schon eines erlebt habe, was bei dem Aufruf
> sh -c '...' -dateiname-der-mit-Minus-beginnt
> als Loginshell startet

Fast alle Bourne Shells betrachten sich hierbei als Login-Shell
(es wird an der entsprechenden Stelle fälschlicherweise $0 statt
argv[0] geprüft), was vor allem die Abarbeitung der Profiles zur
Folge hat.

In ganz wenigen Fällen (z.B. SunOS -5.7, SINIX 5.20) bekommt

0 new messages