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.
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
> 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
> 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.
> 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.
> 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
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!
> 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!
> 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.
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
> Ach ja: welche "FAQ"?
>
> "follow up" gesetzt auf de.alt.gruppenkasper
Ihr habt nicht mal eine FAQ?
Beschreibung auf Kaspergruppe gesetzt.
Andi.
>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.
>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.)
>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
> 'neu="`expr "$1" : '\''\(.*)\.WAV\.mpg$'\''`.mpg"
^
Ich will ja nicht kleinlich sein, aber da fehlt wohl noch ein »\«.
Beste Grüsse - Jürgen
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
> 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.
>> 'neu="`expr "$1" : '\''\(.*)\.WAV\.mpg$'\''`.mpg"
> ^
>Ich will ja nicht kleinlich sein, aber da fehlt wohl noch ein »\«.
Ja, da hast Du recht.
>> '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"
> [...] 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
> [...] 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