Dateiendung mit mv umbennen und *

Post Reply
Message
Author
dazerglovic
Posts: 1
Joined: 22. Oct 2004 18:23

Dateiendung mit mv umbennen und *

#1 Post by dazerglovic »

warum passiert das?

[something@localhost verz]$ mv *.mgk *.jpg ./
mv: »im000245.mgk« und »./im000245.mgk« sind die gleiche Datei
mv: »im000246.mgk« und »./im000246.mgk« sind die gleiche Datei
usw.

habe nach mogrify befehl aus *.jpg resize'te kleine .mgk gekriegt warum weiß ich nicht aber egal.

Wichtiger wäre wie kann man alle dateiendungen in andere umbenen ohne ein script dazu zu brauchen geht das überhaupt?

klopskuchen
prolinux-forum-admin
Posts: 1444
Joined: 26. Jun 2004 21:18
Contact:

#2 Post by klopskuchen »

Geht nicht.
Es erfolgt eine Umbenennund in *.blabla .
Ist in diesem Fall also kein Metazeichen
sondern ein ASCII-Zeichen im Dateinamen.

MfG, Klopskuchen
When all else fails, read the instructions .

User avatar
jochen
prolinux-forum-admin
Posts: 699
Joined: 14. Jan 2000 15:37
Location: Jülich
Contact:

#3 Post by jochen »

Statt mv kannst Du für solche Zwecke rename verwenden:

Code: Select all

rename .mgk .jpg *.mgk
Das ersetzt in allen .mgk-dateien den Bestandteil ".mgk" durch ".jpg.

Unter DOS funktionierte das mit dem Sternchen deswegen, weil jedes Kommando dieses Ternchen selbst implementieren musste. Bei cd funktionierte es gar nicht, bei del so wie bei UNIX und bei ren wieder anders (in der Syntax so, wie Du es oben versucht hattest).

Unter UNIX wird das Sternchen durch die Shell ausgewertet, so dass diese Funktionalität allen Kommandos einheitlich zur Verfügung steht. Das bedeutet aber auch, dass solche Extrawürste wie beim ren unter UNIX so nicht funktionieren können.

Jochen
Die grösste Lüge der EDV? "Mal eben..."

Allo
Posts: 119
Joined: 16. Apr 2004 16:51

#4 Post by Allo »

jochen wrote:Statt mv kannst Du für solche Zwecke rename verwenden:

Code: Select all

rename .mgk .jpg *.mgk
Das ersetzt in allen .mgk-dateien den Bestandteil ".mgk" durch ".jpg.

Unter DOS funktionierte das mit dem Sternchen deswegen, weil jedes Kommando dieses Ternchen selbst implementieren musste. Bei cd funktionierte es gar nicht, bei del so wie bei UNIX und bei ren wieder anders (in der Syntax so, wie Du es oben versucht hattest).

Unter UNIX wird das Sternchen durch die Shell ausgewertet, so dass diese Funktionalität allen Kommandos einheitlich zur Verfügung steht. Das bedeutet aber auch, dass solche Extrawürste wie beim ren unter UNIX so nicht funktionieren können.

Jochen
cool.
das kannte ich noch nicht.

ich mache sowas so:

Code: Select all

for i in *.mgk;do mv $i $(echo $i|sed s/mgk/jpg/i);done
allo
I came, I saw, I deleted all your files.

User avatar
heinrich
Posts: 219
Joined: 22. Sep 1999 11:22
Location: N49.137 E8.544

#5 Post by heinrich »

Allo wrote:
jochen wrote:[...]
ich mache sowas so:

Code: Select all

for i in *.mgk;do mv $i $(echo $i | sed s/mgk/jpg/i);done
allo
Das "sed s/mgk/jpg/i" matcht aber nicht nur die Dateiendung, wenn im Dateinamen noch irgendwo anders die Zeichenkette "mgk" gefunden wird.

Wenn du _NUR_ die Dateiendung möchtest, kannst du auch den Befehl "basename" verwenden:

Code: Select all

for DATEI in *.mgk; do mv "${DATEI}" "$(basename ${DATEI} .mgk).jpg"; done
It just works.

Allo
Posts: 119
Joined: 16. Apr 2004 16:51

#6 Post by Allo »

wenn da kritisch ist, nehme ich einfach

Code: Select all

s/.mgk$/.jpg/
Das reicht dann.


Allo
I came, I saw, I deleted all your files.

User avatar
jochen
prolinux-forum-admin
Posts: 699
Joined: 14. Jan 2000 15:37
Location: Jülich
Contact:

#7 Post by jochen »

Allo wrote:wenn da kritisch ist, nehme ich einfach

Code: Select all

s/.mgk$/.jpg/
Allerdings wird dann im Dateinamen überall, wo ein beliebiges Zeichen gefolgt von "mgk" steht, die Zeichenfolge ",jpeg" eingesetzt:

bamgk.mgk -> b.jpg.mgk

Der Punkt steht bei den Regulären Ausdrücken nämlich für "genau ein beliebiges Zeichen (außer Newline)". So gilt dann auch "amgk" als Treffer. Das zweite ".mgk" würde nicht ersetzt werden, da das Substitute-Kommando des sed nach dem ersten Treffer aufhört, wenn nicht der g-Schalter (global) nach dem schliessenden / angehängt wird.

Wenn Du es so weiterhin machen willst, würde ich

Code: Select all

s/\.mgk$/.jpg/
als sed-Kommando empfehlen. Dann trifft nur noch ein ".mgk" am Ende des Dateinamens.

Jochen
Die grösste Lüge der EDV? "Mal eben..."

Post Reply