Rename
將時間戳添加到文件/目錄名稱
我正在嘗試編寫一個腳本,它將添加時間戳的文件或目錄複製到文件名/目錄名
就像是:
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 格式,因為它是明確的,並且它在字典順序和時間順序上的排序方式相同。
如果您沒有
pax
GNUtar
,但您可以編寫它: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 程式碼,未經測試