私は努力してきました:
cp file.csv file.$(date +%D).csv
ただし、ファイル名は別々のディレクトリを含むスラッシュであるため失敗しますfile.03/27/19.csv
。
私は再試行しました:
cp file.csv file.$(printf "%q" $(date +%D)).csv
しかし、それでも失敗します。
答え1
/
ファイル名、ピリオドを含めることはできません(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年12月3日は2018年12月3日と解釈されます)YYYY-mm-dd形式(これはwrtソートにも役立ちますになります)。
cp file.csv "file.$(date +%Y-%m-%d).csv"
多くのdate
実装により、次のように短縮できます。
cp file.csv "file.$(date +%F).csv"