私はしようとしてきました:
cp file.csv file.$(date +%D).csv
ただし、ファイル名がfile.03/27/19.csv
であり、個別のディレクトリがスラッシュであるため、失敗します。
そして私はもう一度試みています:
cp file.csv file.$(printf "%q" $(date +%D)).csv
しかし、それでも失敗します。
ファイル名、ピリオドに/
(ASCIIベースのシステムではバイト0x2F)を含めることはできません。
/
(U + 2215除算スラッシュ)または∕
(U + 2044分数スラッシュ)のような⁄
のような文字を使用できますが、現在のロケールで使用されている文字セットの数は少なくなります。したがって、次のことができます(U + 2215文字がロケールの文字セットに存在し、GBK、BIG5、UTF-8、GB18030を含む場合):
cp file.csv "file.$(date +%D | sed 's|/|∕|g').csv"
または、いくつかのシェル(zsh
、少なくともbash
)の場合:
cp file.csv "file.$(date +%D | sed $'s|/|\u2215|g').csv"
(ここでは、GNU sed
を含む一部のtr
実装がマルチバイト文字をサポートしていないため、tr
の代わりにtr
を使用しています)。
ただし、ファイルを作成したときに使用されていたものとは異なる文字セットを使用して、ロケールでファイル名が異なる方法でレンダリングされるなどの問題が発生する可能性があります(もちろん、ユーザーがスラッシュのように見えるのを見ると混乱しますファイル名)。
私のアドバイスは、標準を明確に使用することです(米国以外のほとんどの人にとって、2018年3月12日は3として解釈されますrd たとえば2018年12月の)代わりにYYYY-mm-dd形式(これはwrtの並べ替えにも役立ちます):
cp file.csv "file.$(date +%Y-%m-%d).csv"
多くのdate
実装では、次のように短縮できます。
cp file.csv "file.$(date +%F).csv"