Ich habe ein Problem mit meinem Datumsformat. Ich möchte von einem Format zum anderen wechseln und umgekehrt. Meine Datumsformate sind
Format 1
YYYY-MM-DD
Format 2
MM/DD/YYYY
Ich möchte Format 1 in Format 2 und Format 2 in Format 1 ändern.
Ich habe ein Problem mit meinem Datumsformat. Ich möchte von einem Format zum anderen wechseln und umgekehrt. Meine Datumsformate sind
Format 1
YYYY-MM-DD
Format 2
MM/DD/YYYY
Ich möchte Format 1 in Format 2 und Format 2 in Format 1 ändern.
Antworten:
Verwenden Sie dazu das GNU-Datum. Es wird auch zwischen anderen Formaten für Sie konvertiert (siehe date --helpfür die Liste der Formate).
$ date -d 2013-07-05 +%m/%d/%Y
07/05/2013
$ date -d 07/05/2013 +%F
2013-07-05
Angenommen, Sie haben Daten in Textform, die konvertiert werden müssen
echo '2013-12-13' | awk -v FS=- -v OFS=/ '{print $2,$3,$1}'
Und umgekehrt
echo '12/13/2013' | awk -v FS=/ -v OFS=- '{print $3,$1,$2}'
dateAnsatz versuchen , der sicherlich eleganter ist
$ echo YYYY-MM-DD | { IFS=- read y m d && echo "$m/$d/$y"; }
MM/DD/YYYY
Wenn Sie eine Datei mit vielen dieser Daten haben, eine pro Zeile:
awk -F- -vOFS=/ '{print $2,$3,$1}' < that-file
Verwenden Sie sed wie folgt:
$ echo '2013-12-13' | sed -r 's/([[:digit:]]{2,4})-([[:digit:]]{1,2})-([[:digit:]]{1,2})/\2\/\3\/\1/g'
12/13/2013
$ echo '12/13/2013' | sed -r 's/([[:digit:]]{1,2})\/([[:digit:]]{1,2})\/([[:digit:]]{2,4})/\3-\1-\2/g'
2013-12-13
Verwenden Sie eine Variante des Ansatzes von drawbenn, um die geklärte Frage in den Kommentaren zum Ändern des Datumsformats in einem Dateinamen zu beantworten gnu date. Dieser Befehl findet alle Dateien im lokalen Ordner und leitet nur den Dateinamen an weiter xargs, wobei der dategeänderte Dateiname als zweites Argument ersetzt wird, für mvdas die Umbenennung durchgeführt wird.
Die zusätzliche, leicht umständliche Verwendung der bashVariablensubstitution ist erforderlich, bashum den dateBefehl auszuwerten .
find ./ -printf '%f\n' | xargs -I '{}' sh -c 'mv $1 $(date -j -f %Y-%m-%d $1 +%m/%d%Y)' -- {} \;