[gelöst] Script um Zahlen zu trennen
[gelöst] Script um Zahlen zu trennen
Hi
Ich habe folgendes Problem
Dateiname ist z.B. 20100716181032_MD.avi
Werden soll daraus 2010_07_16_18:10:32_MD.avi
Die Dateien sollen per wget vom Server geholt und dann möchte ich das automatisch umbennen.
Hat da jemand ein paar Anregungen wie mensch das umsetzen könnte?
Danke schonmal.
Gruss
Dirk
Ich habe folgendes Problem
Dateiname ist z.B. 20100716181032_MD.avi
Werden soll daraus 2010_07_16_18:10:32_MD.avi
Die Dateien sollen per wget vom Server geholt und dann möchte ich das automatisch umbennen.
Hat da jemand ein paar Anregungen wie mensch das umsetzen könnte?
Danke schonmal.
Gruss
Dirk
Zuletzt geändert von Pa D. am 31.01.2011 12:33:09, insgesamt 1-mal geändert.
Re: Script um Zahlen zu trennen
Code: Alles auswählen
for f in 20[0-9][0-9]*_MD.avi; do mv $f `echo $f | sed \
's/\(....\)\(..\)\(..\)\(..\)\(..\)\(..\)_MD.avi/'\
'\1_\2_\3_\4:\5:\6_MD.avi/'`
done
Re: Script um Zahlen zu trennen
rename ist sehr angenehm für solche Einsätze:
Gruß
gms
Code: Alles auswählen
gms@gms2:~$ touch 20100716181032_MD.avi
gms@gms2:~$ rename 's/^(\d{4})(\d\d)(\d\d)(\d\d)(\d\d)(\d\d)/$1_$2_$3_$4:$5:$6/' *.avi
gms@gms2:~$ ls *.avi
2010_07_16_18:10:32_MD.avi
gms
- mistersixt
- Beiträge: 6601
- Registriert: 24.09.2003 14:33:25
- Lizenz eigener Beiträge: GNU Free Documentation License
Re: Script um Zahlen zu trennen
http://www.dem-gxyz-seine-sed-zeile-is- ... -yours.com !Meillo hat geschrieben:Gut.
Ich fürchte, ich kann's nicht toppen.
Gruss, mistersixt.
--
System: Debian Bookworm, 6.11.x.-x-amd64, ext4, AMD Ryzen 7 3700X, 8 x 3.8 Ghz., Radeon RX 5700 XT, 32 GB Ram, XFCE
System: Debian Bookworm, 6.11.x.-x-amd64, ext4, AMD Ryzen 7 3700X, 8 x 3.8 Ghz., Radeon RX 5700 XT, 32 GB Ram, XFCE
Re: Script um Zahlen zu trennen
Ich fürchte nur, es ist anders rum, denn länger (meist gleichbedeutend mit umständlicher) ist bei sed nicht das Problem. Kurz, knackig, prägnant, das ist die Kunst. Bei sed freut sich also meist der mit dem kürzesten Schwanz.mistersixt hat geschrieben:http://www.dem-gxyz-seine-sed-zeile-is- ... -yours.com !Meillo hat geschrieben:Gut.
Ich fürchte, ich kann's nicht toppen.
Nachdem gms nun rename eingeworfen hat, ist mein Favorit:
Code: Alles auswählen
$ rename 's/^(....)(..)(..)(..)(..)(..)/$1_$2_$3_$4:$5:$6/' *_MD.avi
Use ed once in a while!
Re: Script um Zahlen zu trennen
gxyz hat geschrieben:(Man kann's auch lesbarer formatieren - ich wollte nur verhindern, dass die Foren-Software an den falschen Stellen die Zeilen umbricht ...Code: Alles auswählen
for f in 20[0-9][0-9]*_MD.avi; do mv $f `echo $f | sed \ 's/\(....\)\(..\)\(..\)\(..\)\(..\)\(..\)_MD.avi/'\ '\1_\2_\3_\4:\5:\6_MD.avi/'` done
Perfekt, genau so wollte ich das.
Danke nochmal.
Jetzt brauch ich noch 2 Wochen zum verstehen
Ich gehe mal davon aus das bei der ersten sed Zeile in Zeichengruppen von 4 bzw 2 Zeichen Länge zerlegt wird und bei der nächsten die Gruppen aufgerufen werden.
Seh ich das so ungefähr richtig?
Re: Script um Zahlen zu trennen
Genau das (wobei der Punkt für ein beliebiges Zeichen steht und nur durch das Glob-Muster in der for-Schleife festgelegt wird, dass der Dateiname mit 4 Ziffern beginnen muss; ach ja, Vorsicht: Das Pattern hat ein "Jahr-2100-Problem" ;-)Pa D. hat geschrieben:
Ich gehe mal davon aus das bei der ersten sed Zeile in Zeichengruppen von 4 bzw 2 Zeichen Länge zerlegt wird und bei der nächsten die Gruppen aufgerufen werden.
Seh ich das so ungefähr richtig?
Re: Script um Zahlen zu trennen
... wobei allerdings der sed-Ausdruck haupsächlich deswegen abchreckend aussieht, weil dort gruppierende Klammern gequotet werden müssen - ansonsten läßt sich mit sed abgesehen von dem redundanten '_MD.avi' am Ende vermutlich nichts mehr einsparen.Meillo hat geschrieben: Ich fürchte nur, es ist anders rum, denn länger (meist gleichbedeutend mit umständlicher) ist bei sed nicht das Problem. Kurz, knackig, prägnant, das ist die Kunst. Bei sed freut sich also meist der mit dem kürzesten Schwanz.
Wenn auch Perl erlaubt ist, wäre das hier mein Beitrag zum 'Wer-hat-den-Kürzesten'-Wettbewerb ;-)
Code: Alles auswählen
rename 's/^@{[q((..))x7]}/$1$2_$3_$4_$5:$6:$7/' *_MD.avi
Code: Alles auswählen
rename 's/^@{[q((\d{2}))x7]}/$1$2_$3_$4_$5:$6:$7/' *_MD.avi
Re: Script um Zahlen zu trennen
Nett und kreativ.gxyz hat geschrieben: Wenn auch Perl erlaubt ist, wäre das hier mein Beitrag zum 'Wer-hat-den-Kürzesten'-Wettbewerb
Code: Alles auswählen
rename 's/^@{[q((..))x7]}/$1$2_$3_$4_$5:$6:$7/' *_MD.avi
Use ed once in a while!
Re: Script um Zahlen zu trennen
Nicht schlecht. Diese Variante in perl kannte ich noch nicht.
Verständnisfrage:
Durch das @{[...]} wird alles in einem Array gespeichert und durch das q(..) gequotet. Die innere (..) Klammer speichert durch die . Punkte 2 beliebige Zeichenfolgen. Mit x7 wird festgelegt, dass später auf 7 Variablen zugegriffen werden kann bzw. nur bis zu 7 Werte-Paare im Array gespeichert werden sollen.
Verständnisfrage:
Durch das @{[...]} wird alles in einem Array gespeichert und durch das q(..) gequotet. Die innere (..) Klammer speichert durch die . Punkte 2 beliebige Zeichenfolgen. Mit x7 wird festgelegt, dass später auf 7 Variablen zugegriffen werden kann bzw. nur bis zu 7 Werte-Paare im Array gespeichert werden sollen.
Oh, yeah!
Re: Script um Zahlen zu trennen
Nicht ganz: "q((..))x7" (weil man sonst wegen der shell wieder haufenweise Zeug quoten müsste, geht "'(..)'x7" nicht so ohne weiteres - schade, wäre ein Zeichen weniger;) - ist einfach nur eine andere Möglichkeit, um ziemlich hinterrücks '(..)(..)(..)(..)(..)(..)(..)' zu schreiben - abgesehen davon, daß das Ganze so ein paar Zeichen kürzer und optisch spketakulärer ist, im Prinzip also das Gleiche wie bei den anderen Lösungsvorschlägen ...Duff hat geschrieben: Mit x7 wird festgelegt, dass später auf 7 Variablen zugegriffen werden kann bzw. nur bis zu 7 Werte-Paare im Array gespeichert werden sollen.
Re: Script um Zahlen zu trennen
Noch zwei Zeichen kürzer:
Man kann mit Double-Quotes statt q() verwenden, und den Zeilenanfangsanker kann man weglassen weil immer der frühste, längst Match genommen wird, und die Punkte passen immer am Anfang.
Code: Alles auswählen
rename 's/@{["(..)"x7]}/$1$2_$3_$4_$5:$6:$7/' *_MD.avi
Use ed once in a while!
Re: Script um Zahlen zu trennen
Gratuliere - eindeutig der Kürzeste ;-)Meillo hat geschrieben:Noch zwei Zeichen kürzer: ;-)
Immerhin lassen sich im gleichen Stil in dem ursprünglichen Shell/sed-Beispiel doch noch mehrere Anschläge einsparen:
Code: Alles auswählen
d='\(..\)'; for f in *_MD.avi; do mv $f `echo $f |
sed "s/$d$d$d$d$d$d$d/"'\1\2_\3_\4_\5:\6:\7/'`; done