• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Dateinamen umwandeln

Sharki

Newbie
Moin moin

ich stehe nicht besonders gut mit sed auf du und du.

Ich habe Datein der Form Text_JJJJMMTT_HHMMSS_XXXX.avi.
Die möchte ich in eine Dateistruktur ./Text/JJJJ/MM/TT/HHMMSS.avi speichern.

Das mit dem Scipt bekomme ich hin. (Schleife etc.) Nur den sed Ausdruck nicht.
Ich hänge hier

sed 's/ .*//; s:_:/:g; s/[0-9][0-9][0-9][0-9]//'

Grüße Hajo
 
A

Anonymous

Gast
Sharki schrieb:
ich stehe nicht besonders gut mit sed auf du und du.
das geht nicht nur mit sed, das geht auch mit anderen Mitteln.
sed ist nur das was am küüüüüüüürzesten und spektakulärsten aussieht. ;)
Beispiel: unter der Vorraussetzung das XXXX Ziffern sind und "Text" nur aus Ziffern und/oder A-z bestehen kann.
Code:
robi@linux-akasa:/> FILE=TESt_20130830_125929_1234.avi
robi@linux-akasa:/> echo $FILE | sed 's;^\([[:alnum:]]*\)\(_\)\([[:digit:]]\{4\}\)\([[:digit:]]\{2\}\)\([[:digit:]]\{2\}\)\(_\)\([[:digit:]]\{6\}\)_\([[:digit:]]\+4\)\(\.avi\);\./\1/\3/\4/\5/\7\9;'
./TESt/2013/08/30/125929.avi
beispielsed
wird aber so nicht einsetzbar sein, du musst erst noch ein Verzeichnis daraus machen (zB mit dirname) das du dann erst mit "mkdir -p" anlegen musst, und dann kannst du erst die Datei dorthin kopieren oder verschieben.

da du XXXX wohl wegschneiden willst, solltest du noch zusätzlich testen das es nicht schon so eine Datei gibt, da du diese sonst beim Kopieren zB überschreiben würdest.

robi
 
OP
S

Sharki

Newbie
Hi

Danke erst einmal. Sieht ja ein wenig nach wodoo aus.

Kann Text bei deinem Beispiel beliebig lang sein ?
Ich habe im Augenblick 3 Zeichen. Kann sich aber ändern.

Warum benutzt man das semikolon ? Und warum wird digit/alnum in [[: :]] gesetzt ?

Hast du ein Tipp für eine gute Seite/Buch wo man das lernen kann ?

Grüße Hajo
 

abgdf

Guru
Ich würd's so machen:
Code:
echo "Text_JJJJMMTT_HHMMSS_XXXX.avi" | perl -ne '@b=split("_");print"$b[0]/".substr($b[1],0,4)."/".substr($b[1],4,2)."/".substr($b[1],6,2)."/$b[2].avi\n"'
Oder, da robi Fan von awk ist:
Code:
echo "Text_JJJJMMTT_HHMMSS_XXXX.avi" | awk -F "_" '{printf "%s/%s/%s/%s/%s.avi\n",$1,substr($2,0,4),substr($2,5,2),substr($2,7,2),$3}'
beispielperl
beispielawk
 
A

Anonymous

Gast
Sharki schrieb:
Sieht ja ein wenig nach wodoo aus.

Kann Text bei deinem Beispiel beliebig lang sein ?
Ich habe im Augenblick 3 Zeichen. Kann sich aber ändern.

Warum benutzt man das semikolon ? Und warum wird digit/alnum in [[: :]] gesetzt ?

Hast du ein Tipp für eine gute Seite/Buch wo man das lernen kann ?
Alles keine Hexerei nur Reguläre Ausdrücke, Einstiegsseite mit Links zu allem was man braucht.

Text kann in meinem Beispiel beliebig lang sein solange er nur aus Buchstaben und Zahlen besteht.
Das Semikolon ist hier nur dazu da "um die Russen zu verwirren". jedes Zeichen das beim s-Befehl hinter s steht wird als Trennzeichen akzeptiert, normalerweise nutzt man / aber da es sich hier um Dateinamen handelt in denen / schon drin sind oder rein müssen, sollte man ein anderes Zeichen nehmen, da man sonst das / auch \/ schreiben müsste, was noch unübersichtlicher wird. Ich habe mich in diesem Beispiel eben für ; entschieden, hätte genauso gut auch # ~ @ | oder was immer oder um es ganz verrückt aussehen zu lassen einen Buchstaben nehmen können.

robi
 
Oben