Datum aus Dateinamen umwandeln

01/08/2010 - 23:52 von Mike Sephan | Report spam
Ich versuche gerade Dateinamen, die so aussehen "29.04.2009 - name.xyz"
so abzuàndern, dass das die Dateien sinnvoll sortiert werden können.
Also so: "2009-04-29 - name.xyz"

Ich habe nun mit awk das Datum versuch in seine Einzelteile zu erzlegen.
Mit Tag und Monat geht das auch schon.

delim="."
day=$(echo "$@" | awk 'BEGIN{FS="'${delim}'"}{print $1}')
month=$(echo "$@" | awk 'BEGIN{FS="'${delim}'"}{print $2}')

Nur das Jahr schaffe ich nicht:
year=$(echo "$@" | awk '{ match($0,/\.[0-9]\{4\}\ /)
substr($0,RSTART+1,RLENGTH-2) }')

year=$(echo "$@" | awk 'BEGIN{FS="'${delim}'|" ""}{print $2}')

Und so hàtte ich das Ganze wieder zusammengesetzt:
filename=$(echo "$@" | sed "s,[0-9]\{2\}\.[0-9]\{2\}\.[0-9]\{4\},," )
filename=$(echo "${year}-${month}-${day} " "${filename}")

Da gibts mit Sicherheit viel bessere Lösungen als was ich da wieder
zustande gebracht habe.
 

Lesen sie die antworten

#1 Juergen P. Meier
02/08/2010 - 05:55 | Warnen spam
Mike Sephan :
Ich versuche gerade Dateinamen, die so aussehen "29.04.2009 - name.xyz"
so abzuàndern, dass das die Dateien sinnvoll sortiert werden können.
Also so: "2009-04-29 - name.xyz"
Da gibts mit Sicherheit viel bessere Lösungen als was ich da wieder
zustande gebracht habe.



Es gibt immer andere Loesungen. z.B. ohne AWK rein in shell:

filename="29.04.2009 - name.xyz"

day="${filename%%.*}"
rest="${filename#*.}"
month="${rest%%.*}"
rest="${rest#*.}"
year="${rest%%\ *}"
name="${rest#*\ }"

new="${year}-${month}-${day} ${name}"

echo mv "$filename" "$new"

HTH,
Juergen
Juergen P. Meier - "This World is about to be Destroyed!"
end
If you think technology can solve your problems you don't understand
technology and you don't understand your problems. (Bruce Schneier)

Ähnliche fragen