J'ai un problème avec mon format de date. Je veux passer d'un format à l'autre et vice versa. Mes formats de date sont
Format 1
YYYY-MM-DD
Format 2
MM/DD/YYYY
Je souhaite changer de format 1 au format 2 et au format 2 au format 1.
Utilisez GNU 'date' pour cela. Il convertira également entre d'autres formats pour vous (voir date --help
Pour la liste des formats).
$ date -d 2013-07-05 +%m/%d/%Y
07/05/2013
$ date -d 07/05/2013 +%F
2013-07-05
En supposant que vous avez des dates sous forme de texte qui doivent être converties
echo '2013-12-13' | awk -v FS=- -v OFS=/ '{print $2,$3,$1}'
Et vice versa
echo '12/13/2013' | awk -v FS=/ -v OFS=- '{print $3,$1,$2}'
$ echo YYYY-MM-DD | { IFS=- read y m d && echo "$m/$d/$y"; }
MM/DD/YYYY
Si vous avez un fichier avec beaucoup de ces dates, un par ligne:
awk -F- -vOFS=/ '{print $2,$3,$1}' < that-file
Répondre à la question clarifiée dans les commentaires sur la manière de modifier le format de date dans un nom de fichier, utilisez une variante de Drewbenn's gnu date
approcher. Cette commande trouve tous les fichiers dans le dossier local et ne pipe que le nom du fichier sur xargs
, substituant le nom de fichier date
modifié comme deuxième argument à mv
qui effectue le renommer.
L'utilisation supplémentaire légèrement détournée de la substitution variable bash
est nécessaire comme bash
évalue la commande date
.
find ./ -printf '%f\n' | xargs -I '{}' sh -c 'mv $1 $(date -j -f %Y-%m-%d $1 +%m/%d%Y)' -- {} \;
Utiliser SED comme suit:
$ 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