Perl: Bindestrich durch Leerzeichen ersetzen

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
rannseier
Beiträge: 79
Registriert: 24.09.2007 12:37:30

Perl: Bindestrich durch Leerzeichen ersetzen

Beitrag von rannseier » 23.11.2024 00:24:31

Hallo zusammen,

Durch einen Denkfehler in später Nacht habe ich mir folgendes eingehandelt:

Code: Alles auswählen

-rw-r--r--  1 root root    2738578 18. Nov 17:54 2024-11-18-17-54-10-1874.jpg
-rw-r--r--  1 root root    2669827 18. Nov 17:54 2024-11-18-17-54-15-1875.jpg
-rw-r--r--  1 root root    2847090 18. Nov 17:54 2024-11-18-17-54-21-1876.jpg
-rw-r--r--  1 root root    7016013 18. Nov 18:00 2024-11-18-17-59-41-1877.jpg
-rw-r--r--  1 root root    5148246 19. Nov 08:17 2024-11-19-08-16-13-1878.jpg
-rw-r--r--  1 root root    2832524 19. Nov 08:17 2024-11-19-08-16-14-1879.jpg
-rw-r--r--  1 root root    2360282 19. Nov 11:34 2024-11-19-11-32-53-1882.jpg
Der Bindestrich zwischen 2024-11-18 und Uhrzeit soll wieder weg.

Folgendes funktioniert leider nicht:

Code: Alles auswählen

rename -v 's/\2024\-11\-18\-/2024\-11\-18 /g' *
Was mach ich flasch? Auch "\ " geht nicht.

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

Re: Perl: Bindestrich durch Leerzeichen ersetzen

Beitrag von tobo » 23.11.2024 01:07:45

Der eigentliche Fehler ist das \2024, was vielleicht als Referenz auf die nicht vorhandene 2024. Gruppe, die mit einem Klammernpaar () erfasst wird, aufgefasst wird. Jedenfalls werden einstellige, nicht vorhandene Referenzen direkt als Fehler markiert. Die anderen \ (vor den -) sind nur unnötig. Was willst du denn da quoten - der "-" hat nur innerhalb von [] eine Sonderbedeutung.
Eine andere Variante ohne das Datum direkt hinschreiben zu müssen (aber mit einem Unterstrich):

Code: Alles auswählen

rename -n 's/^(\d{4}-\d{2}-\d{2})-/$1_/' *

rannseier
Beiträge: 79
Registriert: 24.09.2007 12:37:30

Re: Perl: Bindestrich durch Leerzeichen ersetzen

Beitrag von rannseier » 23.11.2024 09:27:44

Tatsächlich so gehts.

Gibt es noch eine Idee, wie ich den mittleren Teil mit der Uhrzeit angleichen kann?

Ist:

Code: Alles auswählen

-rwxr-xr-x  1 root root    2002944 14. Nov 15:07 '2024-11-14 150754 0024 D.JPG'
-rwxr-xr-x  1 root root    1994752 14. Nov 15:08 '2024-11-14 150831 0025 D.JPG'
-rwxr-xr-x  1 root root    1359872 14. Nov 15:09 '2024-11-14 150907 0026 D.JPG'
Ziel:

Code: Alles auswählen

-rw-r--r--  1 root root    4009705 15. Nov 16:17 '2024-11-15 16-15-02 1690.jpg'
-rw-r--r--  1 root root    4013430 15. Nov 16:16 '2024-11-15 16-15-02 1691.jpg'
-rw-r--r--  1 root root    4034757 15. Nov 16:16 '2024-11-15 16-15-04 1692.jpg'

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

Re: Perl: Bindestrich durch Leerzeichen ersetzen

Beitrag von tobo » 23.11.2024 10:10:19

Uhrzeit und Endung:

Code: Alles auswählen

rename -n 's/(\d{2})(\d{2})(\d{2})/$1-$2-$3/; s/JPG$/jpg/' *

rannseier
Beiträge: 79
Registriert: 24.09.2007 12:37:30

Re: Perl: Bindestrich durch Leerzeichen ersetzen

Beitrag von rannseier » 25.11.2024 12:48:53

Prima funktioniert.

Dann habe ich in dem gleichen Verzeichnis noch folgendes Problem:

Code: Alles auswählen

-rwxr-xr-x   1 root root    1507328 14. Nov 15:54 '2024-11-14 155439 0070 D.JPG'
-rwxr-xr-x   1 root root    1105920 14. Nov 15:54 '2024-11-14 155451 0071 D.JPG'
-rw-r--r--   1 root root    5218642 14. Nov 15:58 '2024-11-14 15-57-01 1678.jpg'
-rw-r--r--   1 root root    3062043 14. Nov 15:58 '2024-11-14 15-57-34 1679.jpg'
-rwxr-xr-x   1 root root    1515520 14. Nov 16:03 '2024-11-14 160347 0072 D.JPG'
-rwxr-xr-x   1 root root    1765376 14. Nov 16:03 '2024-11-14 160353 0073 D.JPG'
Die Uhrzeiten mit ohne Bindestrich (160353) sollen auch mit Bindestrich umbenannt werden (16-03-53) geht das auch noch unkompliziert?

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

Re: Perl: Bindestrich durch Leerzeichen ersetzen

Beitrag von tobo » 25.11.2024 13:05:20

rannseier hat geschrieben: ↑ zum Beitrag ↑
25.11.2024 12:48:53
Die Uhrzeiten mit ohne Bindestrich (160353) sollen auch mit Bindestrich umbenannt werden (16-03-53) geht das auch noch unkompliziert?
Du bist vielleicht zu weit nah dran am Geschehen - worin liegt der Unterschied zur letzten Frage, wo ebenfalls (exemplarisch) "160353" in "16-03-53" umgewandelt werden sollte?

Ohne jetzt jeder Änderung einzeln nachzulaufen, zeige doch einfach mal ein paar Zeilen des Ausgangsmaterials (die Ur-Dateinamen) und dann das, was daraus werden soll.

Antworten