Rename

將時間戳添加到文件/目錄名稱

  • January 19, 2014

我正在嘗試編寫一個腳本,它將添加時間戳的文件或目錄複製到文件名/目錄名

就像是:

cover.jpg --> cover_18-01-2014_17:37:32.jpg
directory --> directory_18-01-2014_17:37:32

我不知道如何將時間戳添加到文件名/目錄名。有人可以幫忙嗎?

時間戳

now="$(date +'%d-%m-%Y_%T')"

使用pax其正則表達式支持\|運算符的實現:

now=$(date +%F_%T)
pax -rw -"s@/\(\([^/]*\)\(\.[^/]*\)\|\([^/.]*\)\)@/\2\4_$now\3@g" . /dest/

我真的建議使用 2014-01-18 格式,因為它是明確的,並且它在字典順序和時間順序上的排序方式相同。

如果您沒有paxGNU tar,但您可以編寫它:

tar -cf - --transform="s@/\(\([^/]*\)\(\.[^/]*\)\|\([^/.]*\)\)@/\2\4_$now\3@g" . |
 (cd /dest && tar xf -)

在這兩種情況下,如果那裡有符號連結,則替換也適用於符號連結的目標,並且除非所有連結目標都採用 . 形式,否則不太可能正確完成./some/thing

如果您添加要調試的腳本會有所幫助,但這就是我要做的。您必須為腳本指定兩個參數,包括斜杠路徑(它不輸入驗證以保持簡短)。

$ datestamp-cp.sh /path/to/source/ /path/to/destination/

datestamp-cp.sh 的內容

#/bin/env sh
SRC=$1
夏令時=$2
現在=$(日期 +'%d-%m-%Y_%T')

對於 `ls $SRC` 中的 F;做
EXT=`rev $F|cut -d。-f1`
NAM=${F##*.}
cp -r $SRC$F $DST$NAM​​-$NOW.$EXT
完畢

如果您希望每個文件都有準確的移動時間(與時間戳匹配),請在 FOR 循環內移動 NOW= 行。

不要忘記使腳本可執行

chmod u+x 日期戳-cp.sh
  • 這是 sudo 程式碼,未經測試

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