Shell

轉義文件名中的 mm/dd/YY 備份日期

  • March 28, 2019

我一直在嘗試:

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"

引用自:https://unix.stackexchange.com/questions/509043