Impossible d'utiliser la command de date pour modifier le format de date spécifique dans le shell Bash sur le terminal OS X

J'utilise la command date -d pour changer un format de date spécifique en un autre. Voici l'exemple utilisé

 currDate=`Wed 12 Feb 2014` formattedDate=`date -d"${currDate}" +%Y%m%d` echo $formattedDate 

Vous ne devriez pas utiliser de backticks ( ` ) sauf si vous affectez le résultat d'une command à une variable, dans ce cas vous affectez une string, il suffit de la citer:

 currDate="Wed 12 Feb 2014" formattedDate=`date -d"${currDate}" +%Y%m%d` echo $formattedDate 

Je n'ai pas access à un mac, donc je ne peux pas tester cela mais selon la page man de la date OSX, cela devrait fonctionner:

 formattedDate=`date -jf "%a %d %b %Y" "${currDate}" +%Y%m%d` 

La plupart des utilitaires d'OSX sont basés sur des versions BSD identiques, donc les informations que vous trouvez pour Linux ne se traduisent pas toujours par OSX. De man date sur OSX:

  -f Use input_fmt as the format ssortingng to parse the new_date provided rather than using the default [[[mm]dd]HH]MM[[cc]yy][.ss] format. -j Do not try to set the date. This allows you to use the -f flag in addition to the + option to convert one date format to another. 

J'ai testé ce qui suit sur mon OSX qui a fonctionné:

 currDate="Wed 12 Feb 2014" formattedDate=`date -v"${currDate}" +%Y%m%d` echo $formattedDate 

De la page de manuel -v est:

Ajuster (c.-à-d., Prendre la date actuelle et afficher le résultat du réglage, pas réellement régler la date) la seconde, minute, heure, mois jour, semaine jour, mois ou année selon val. Si val est précédé d'un signe plus ou less, la date est ajustée en avant ou en arrière selon la string restante, sinon la partie pertinente de la date est définie. La date peut être ajustée autant de fois que nécessaire en utilisant ces drapeaux. Les drapeaux sont traités dans l'ordre indiqué.

Cela obtiendra la bonne réponse:

 date -jf"%a %e %b %Y" "Wed 12 Feb 2014" +%Y%m%d 

La sortie est:

 20140212