日付の形式に問題があります。ある形式から別の形式に、またはその逆に変更したい。私の日付形式は
形式1
YYYY-MM-DD
形式2
MM/DD/YYYY
フォーマット1をフォーマット2に、フォーマット2をフォーマット1に変更したい。
これにはGNU 'date'を使用します。また、他のフォーマット間で変換されます(date --help
形式のリスト)。
$ date -d 2013-07-05 +%m/%d/%Y
07/05/2013
$ date -d 07/05/2013 +%F
2013-07-05
あなたが変換する必要があるテキスト形式の日付があると仮定します
echo '2013-12-13' | awk -v FS=- -v OFS=/ '{print $2,$3,$1}'
およびその逆
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
これらの日付がたくさんあるファイルがある場合は、1行に1つ:
awk -F- -vOFS=/ '{print $2,$3,$1}' < that-file
ファイル名の日付形式を変更する方法に関するコメントの明確な質問に答えるには、drewbennのgnu date
アプローチのバリアントを使用します。このコマンドは、ローカルフォルダー内のすべてのファイルを検索し、ファイル名のみをxargs
にパイプして、名前変更を実行するdate
の2番目の引数としてmv
変更されたファイル名を置き換えます。
bash
はbash
コマンドを評価するため、date
変数置換の追加の少し回路的な使用が必要です。
find ./ -printf '%f\n' | xargs -I '{}' sh -c 'mv $1 $(date -j -f %Y-%m-%d $1 +%m/%d%Y)' -- {} \;
次のようにsedを使用します。
$ 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