Dateinamen in Ordnernamen umbenennen

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
vobie
Beiträge: 195
Registriert: 29.08.2003 21:14:50

Dateinamen in Ordnernamen umbenennen

Beitrag von vobie » 08.10.2015 16:34:51

Hallo,

habe mal wieder ein kleines Problem.

Ich muss ca 300 Dateien so umbenennen das diese genau wie der Ordner in dem sie liegen heisst.
also:

Code: Alles auswählen

Ordner                    Datei im Ordner                         Datei nach Umbennennung
768945    A_Batch_00001_000006_05.04.2015.pdf        768945.pdf
275649    A_Batch_00003_000007_05.04.2015.pdf        275649.pdf
985756    A_Batch_00009_000001_05.04.2015.pdf        985756.pdf
...            ...                                                               ...
Dazu kommt auch noch, es kann vorkommen das zwei Dateien in einem Ordner (z.B.76465) liegen können die dann zB. in 76465 (1).pdf und 76465 (2).pdf umbenannt werden müssen.

ich habe absolut keinen Plan wie ich das mit einem shell script machen soll ?

danke schon mal für eure Hilfe.

vobie
Es gibt keine dummen Fragen. Aber leider viele dumme Antworten.

tobo
Beiträge: 2339
Registriert: 10.12.2008 10:51:41

Re: Dateinamen in Ordnernamen umbenennen

Beitrag von tobo » 08.10.2015 20:43:45

Wenn Du damit leben könntest, dass die Dateien in 76465.pdf (anstatt 76465(1).pdf) und 76465(2).pdf umbenannt werden, dann könnte ich folgendes auf die Schnelle anbieten:

Code: Alles auswählen

find . -type f -exec rename 's#/([^/]*)/[^/]*pdf$#/$1/$1.pdf#' {} + -exec rename 's#/([^/]*)/[^/]*pdf$#/$1/$1(2).pdf#' {} +
Ist allerdings mit dem obligatorischen -n von rename im Vorfeld nicht sinnvoll zu testen, da dann die Dateien ja eben noch nicht umbenannt sind!? Am besten führst Du das also erstmal im Stammverzeichnis einer Kopie deiner Daten aus, um zu schauen, ob das Ergebnis dir gefällt.

Idee: Finde alle *pdf-Dateien in einem Verzeichnis und dessen Unterverzeichnissen und bilde eine Liste davon. Gehe die Liste durch und benenne alle Dateien entsprechend um. Bei einer 2. Datei in einem Verzeichnis scheitert er, da keine Dateien im Verzeichnis gleich benannt sein dürfen. Danach nehme nochmal dieselbe Liste und benenne nochmal (Datei(2).pdf) um. Da die meisten Dateien aber bereits umbenannt sind, werden diese in der Liste nicht mehr gefunden und damit nur noch die bisher noch nicht umbenannten Dateien bearbeitet. Könnte man theoretisch noch durch weitere "-exec ...(3/4/5...)pdf..+"-Zweige ergänzen, falls mehr als 2 Dateien in den Verzeichnissen liegen. Daran erkennt man auch, dass das ganze ziemlich unflexibel ist. Sollte aber tun...

PS:
Mit variabler Dateiendung:

Code: Alles auswählen

find . -type f -exec rename 's#/([^/]+)/[^/]+\.([^/]+)$#/$1/$1.$2#' {} + -exec rename 's#/([^/]+)/[^/]+\.([^/]+)$#/$1/$1(2).$2#' {} +

vobie
Beiträge: 195
Registriert: 29.08.2003 21:14:50

Re: Dateinamen in Ordnernamen umbenennen

Beitrag von vobie » 16.10.2015 15:28:48

@ tobo

Danke hat mir schon sehr geholfen

gruß
vobie
Es gibt keine dummen Fragen. Aber leider viele dumme Antworten.

Antworten