Sie sind nicht angemeldet.

  • »Falco2« ist männlich
  • »Falco2« ist der Autor dieses Themas

Beiträge: 376

Registrierungsdatum: 16.09.2008

Derivat: Ubuntu

Version: 16.04 LTS (Xenial Xerus)

Architektur: 64-Bit PC

Desktop: anderer Desktop

Andere Betriebssysteme: EasyPeasy 1.6 = 10.04 -=- Linux Mint 17.3

  • Nachricht senden

1

09.03.2017, 13:07

Dateien umbenennen inklusive Unterordner..

das leidige Thema....

ich möchte gerne auf der Konsole mehrere Dateien umbenennen. Ein einfaches Script übernimmt die Aufgabe

Quellcode

1
2
3
#!/bin/bash
# aus "&" wird "und" - aus "(" wird nix - aus ")" wird nix - aus Doppelt Unterstrich wird einfacher Unterstrich - aus Leerzeichen wird Unterstrich - aus ' wird nix
rename -v "s/&/und/g" * && rename -v "s/\(//g" * && rename -v "s/\)//g" * && rename -v "s/__/_/g" * && rename "s$


aber leider nur im aktuellen Ordner ;(

ein absteigen in Unterordner habe ich über den Befehl find ausprobiert..

mit find -iname \*.* |

Quellcode

1
2
3
#!/bin/bash
# aus "&" wird "und" - aus "(" wird nix - aus ")" wird nix - aus Doppelt Unterstrich wird einfacher Unterstrich - aus Leerzeichen wird Unterstrich - aus ' wird nix
find -iname \*.* | rename -v "s/&/und/g" * && find -iname \*.* | rename -v "s/\(//g" * && find -iname \*.* | rename -v "s/\)//g" * && find -iname \*.* | rename -v "s/__/_/g" * && find -iname \*.* | rename "s$


leider bringt das nicht den gewünschten Erfolg…

Ich möchte vom aktuellen Ordner aus absteigen und alles umbenennen - Ordner und Dateien...

jemand ne Idee wo es klemmt? ?(

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Falco2« (09.03.2017, 13:13)


2

09.03.2017, 15:52

Die man-page von rename sagt:

Zitat

If no filenames are given on the command line, filenames will be read via standard input.

1. Mit dem Kommando:

Zitat

find -iname \*.* | rename -v "s/&/und/g" * && find -iname ....
hast du aber mit '*' eben wieder einen filename übergeben. Ergo ist dem remove deine Pipe von find egal ->
leider bringt das nicht den gewünschten Erfolg…
-> man-pages lesen, die von rename ist überschaubar

2. Wozu verknüpfst du alle Kommandos mit '&&'? Dir ist klar, daß die ganze Kette abbricht, wenn ein Glied keinen Erfolg meldet?

3. RegEx's kann man in einem String zusammenpacken. Erspart wiederholte Aufrufe und unerwartete Abbrüche wegen &&-Bedingungen.

4. Auch 'find' kennt Regex und könnte daher gezielt nach den gewünschten files suchen. Erspart ebenfalls Zeit x Arbeit = CPU-Power und würde schon eine definierte Liste für rename ergeben. Nebeneffekt: Man könnte sie sich mit '-ls' vorher ansehen.

So, damit lass ich dich erstmal alleine :)
mir is wurscht

  • »Falco2« ist männlich
  • »Falco2« ist der Autor dieses Themas

Beiträge: 376

Registrierungsdatum: 16.09.2008

Derivat: Ubuntu

Version: 16.04 LTS (Xenial Xerus)

Architektur: 64-Bit PC

Desktop: anderer Desktop

Andere Betriebssysteme: EasyPeasy 1.6 = 10.04 -=- Linux Mint 17.3

  • Nachricht senden

3

09.03.2017, 23:17

1. Mit dem Kommando:

Zitat

find -iname \*.* | rename -v "s/&/und/g" * && find -iname ....
hast du aber mit '*' eben wieder einen filename übergeben. Ergo ist dem remove deine Pipe von find egal ->


Aha, da komme wir der "Ursache" des Problems schon näher..

2. Wozu verknüpfst du alle Kommandos mit '&&'? Dir ist klar, daß die ganze Kette abbricht, wenn ein Glied keinen Erfolg meldet?


Hm... bissel spannend wollte ich es bei Fehlermeldungen schon machen 8)

3. RegEx's kann man in einem String zusammenpacken. Erspart wiederholte Aufrufe und unerwartete Abbrüche wegen &&-Bedingungen.


Ähm wenn ich wüste wie genau ich das machen soll, dann würde ich hier die Frage nicht gestellt haben.
War schon froh das überhaupt alles in ein script zu verpacken :thumbup: Auch wenn ich dabei && Abstürze fabriziert habe :D

4. Auch 'find' kennt Regex und könnte daher gezielt nach den gewünschten files suchen. Erspart ebenfalls Zeit x Arbeit = CPU-Power und würde schon eine definierte Liste für rename ergeben. Nebeneffekt: Man könnte sie sich mit '-ls' vorher ansehen.


?(

So, damit lass ich dich erstmal alleine :)


Ich habe es befürchtet :whistling: