• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

[gelöst] Dateien umbenennen

Hallo,

ich habe eine kleine Frage, wie ich schnell bestimmte Dateien umbennenen kann. Und zwar möchte ich in einem Verzeichnis alle Dateien (auch in allen Unterverzeichnissen), die mit "__" beginnen in entsprechende umbenennen ohne diese __.
Folgendes hab ich mir bisher gedacht:
find . -name "__*" | sed 's/__//g' | mv ???????
Wer kann mir da weiterhelfen?

Dankeschön!
Christian
 
OP
C

Christian123

Newbie
Ah danke!

Wie muss ich das eingeben?
Direkt in der Konsole (glaub ich nicht) oder in einer Datei speichern und dann ausführen (wenn ja muss ich da nicht noch sowas wie #!/usr/bin oder ähnliches schreiben für ein script)?

Und warum steht bei dir im sed-Teil | statt / ?

Grüße
Christian
 
A

Anonymous

Gast
einfach in Konsole eingeben,
nach dem do einfach ein ENTER und dann hast du in jeder neuen Zeile ein
> am Zeilenanfang bis done ENTER dann geht der Befehl erst ab.

robi
 
Christian123 schrieb:
Und warum steht bei dir im sed-Teil | statt / ?
Gewohnheit. ;) Es ist egal, Du kannst auch "/" statt "|" schreiben. Du kannst sogar jedes x-beliebige Zeichen nehmen. Wichtig ist nur, dass es im regulären Ausdruck nicht vorkommt. D.h. 's@__@@' geht gleichermaßen wie 's#__##' oder 'sX__XX', nur 's_____' geht nicht. ;)

Zum Ausführen: Egal. Entweder Du machst ein Skript, dieses müsste mit "#!/bin/sh" beginnen, oder Du gibst die Zeilen einfach nacheinander ein.

PS: Achtung, mein Vorschlag von oben würde auch solche Dateien umbenennen, bei denen "__" in der Mitte des Dateinamens oder im Namen eines Unterverzeichnisses vorkommt, d.h. aus "./bla/blubb__bla" wird "./bla/blubbbla" usw. Falls Du so einen Fall hast, bitte bescheid sagen.
 
Bei sed ist das erste Zeichen nach z.B. "s für ersetzen" der Feldtrenner
Mit "|" kannst du auch Pfadnamen ersetzen. Jedes andere Zeichen würde auch gehen.

echo "/etc/sysconfig" | sed 's|/etc/|/beispielersetzenmitslash/|

Haveaniceday
 
Hier noch mal eine etwas sicherere Version:
Code:
for i in $(find . -type f -name '__*') ; do
   mv "$i" $(echo "$i" | sed 's|/__|/|')
done
Diese Version ersetzt "__" nur dann, wenn es am Anfang des Dateinamens steht und kommt auch mit dem Fall klar, dass die Namen von Unterverzeichnissen in der Mitte oder am Ende "__" enthalten. Jetzt wird vielleicht auch klar, weshalb ich mir angewöhnt habe, nicht "/" als Feldtrenner zu benutzen. ;)

Der einzige Fall, in dem auch diese Version versagt, wäre der, dass auch die Namen von Unterverzeichnissen mit "__" beginnen. Es ist bestimmt nicht schwer, den Fall auch noch abzufangen, aber es scheint ja auch so geklappt zu haben. ;)
 

XSebastian

Newbie
ich habs immer mit rename gemacht:

Code:
rename from to file

also:

Code:
rename "__" "" *.abc
(abc ist die Dateiendung)

Das klappt zwar nur im aktuellen Verzeichnis, aber ist sehr kurz
 
Oben