Forum: PC-Programmierung viele Dateien umbenennen in linux


von Charly (Gast)


Lesenswert?

Hallo,

wie kann ich viele Dateien umbenennen.

von z.b.

10-blablabla.txt
5-qweqwewqwe.txt
735-werwerwer.txt

nach

blablabla.txt
qweqwewqwe.txt
werwerwer.txt

diese regex trifft das was weg soll:

^.*-

wie kann ich nun diese vielen Dateien dementsprechend umbenennen?

von (prx) A. K. (prx)


Lesenswert?

Passendes Shell-Script erzeugen durch:
1
ls -1 | sed -e "s/^.*-\(.*\)$/mv & \1/"

: Bearbeitet durch User
von Tom K. (ez81)


Lesenswert?

1
rename 's/^.*-//' *

von Charly (Gast)


Lesenswert?

Hallo,

danke habe deine 5 Versuche verfolgt ;) und getestet.

das benennt aber nicht um sondern erzeugt eine Kommando liste wie z.B.

mv 10-blablabla.txt blablabla.txt
mv 5-qweqwewqwe.txt qweqwewqwe.txt
mv 735-werwerwer.txt werwerwer.txt

wirklich umbenannt wurde nichts.

von (prx) A. K. (prx)


Lesenswert?

Charly schrieb:
> wirklich umbenannt wurde nichts.

Sollte auch nicht. Aber das erzeugt ein File, das es bewirkt. Ich mache 
das gerne so, weil ich dann kontrollieren kann was passiert.

von Charly (Gast)


Lesenswert?

Tom K. schrieb:
> rename 's/^.*-//' *

Danke so ähnlich hatte ich das schon versucht, funktioniert 
komischerweise gar nicht der prompt kommt wieder und nichts ist 
passiert.

von Charly (Gast)


Lesenswert?

A. K. schrieb:
> Sollte auch nicht. Aber das erzeugt ein File, das es bewirkt. Ich mache
> das gerne so, weil ich dann kontrollieren kann was passiert.

ok, das hatte ich nicht erkannt ;) dann lenke ich in ein file um und 
lass es laufen :)

von (prx) A. K. (prx)


Lesenswert?

Fortsetzung:

Also in der Art
  ..... > /tmp/1.sh
  ... /tmp/1.sh kontrollieren ...
  sh /tmp/1.sh

von Charly (Gast)


Lesenswert?

A. K. schrieb:
> Fortsetzung:
>
> Also in der Art
>   ..... > /tmp/1.sh
>   ... /tmp/1.sh kontrollieren ...
>   sh /tmp/1.sh

genau so hab ichs gemacht, vielen dank hat geklappt :)

von Tom K. (ez81)


Lesenswert?

Nochmal nachgesehen: Es gibt noch ein anderes rename, das keine Regexe 
kann. Bei Ubuntu wurde rename aber netterweise auf /usr/bin/prename 
umgebogen, das deine Files so wie von mir beschrieben umbenennt.

von Charly (Gast)


Lesenswert?

Tom K. schrieb:
> Nochmal nachgesehen: Es gibt noch ein anderes rename, das keine Regexe
> kann. Bei Ubuntu wurde rename aber netterweise auf /usr/bin/prename
> umgebogen, das deine Files so wie von mir beschrieben umbenennt.

ah, dann wird es daran liegen, ist kein ubuntu System. prename gibt es 
nicht.

root@system:/root/test# rename -V
rename (util-linux-ng 2.18)
root@system:/root/test#

von Tom K. (ez81)


Lesenswert?

Nur für's Archiv: Das Perl-rename mit den Regexen ist debianspezifisch 
und deshalb in Ubuntu gelandet, das originale Primitiv-rename ist noch 
als rename.ul zu finden.

von Yalu X. (yalu) (Moderator)


Lesenswert?

Oder das Ganze ohne sed und rename:
1
for f in *-*; do mv "$f" "${f#*-}"; done

Dateien ohne ein '-' im Namen bleiben unberührt, ansonsten wird alles
bis zum ersten '-' im Namen abgeschnitten. Soll alles bis zum letzten
'-' abgeschnitten werden, ersetze man das '#' durch '##'.

Will man die Funktion erst kontrollieren, fügt man vor dem 'mv' noch ein
'echo' ein.

von O. D. (odbs)


Lesenswert?

Ich benutze für diese Zwecke immer "mmv". Einfach mit
1
sudo apt-get install mmv

nachinstallieren. Das ist ein sehr vielseitiges Werkzeug zum Umbenennen 
mehrerer Dateien, das solche Probleme elegant löst und das 
fehlerträchtige Hantieren mit Shellskripten einspart. Siehe manpage...

von Daniel (Gast)


Lesenswert?

1
for i in $(find . -maxdepth 1 -iname "*-*"); do n=$(echo $i | cut -d'-' -f2); mv $i $n; done

my 2 bash cent's :)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.