Shell
轉義文件名中的 mm/dd/YY 備份日期
我一直在嘗試:
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"
(這裡使用
sed
而不是tr
一些tr
實現,包括 GNUtr
仍然不支持多字節字元)。但是您可能會遇到問題,例如使用與創建文件時使用的字元集不同的字元集在語言環境中呈現不同的文件名(當然,當使用者看到看起來像斜線的內容時,使用者會感到困惑)一個文件名)。
我的建議是使用標準的非模棱兩可(例如,對於美國以外的大多數人來說,03/12/18 將被解釋為 2018 年 12 月 3日)YYYY-mm-dd 格式(這也有助於 wrt 排序):
cp file.csv "file.$(date +%Y-%m-%d).csv"
通過許多
date
實現,您可以縮短為:cp file.csv "file.$(date +%F).csv"