Shell-Script

複製文件並附加時間戳

  • May 10, 2015

我的腳本有兩個問題,即復製文件並向名稱添加時間戳。

cp -ra /home/bpacheco/Test1 /home/bpacheco/Test2-$(date +"%m-%d-%y-%T")

上面添加Test2為文件名,但我希望它保留原始源文件的文件名,在本例中名為Test.

cp -ra /home/bpacheco/Test1 /home/bpacheco/Test2-$(date +"%m-%d-%y-%r")

另一個問題是當我添加%r時間戳程式碼時,我收到錯誤消息,指出目標“PM”不是目錄。我正在嘗試將時間戳記為 12 小時制。

您的問題之一是您在命令替換周圍省略了雙引號,因此命令的輸出date以空格分隔。請參閱為什麼我的 shell 腳本會因空格或其他特殊字元而窒息?這是一個有效的命令:

cp -a /home/bpacheco/Test1 "/home/bpacheco/Test2-$(date +"%m-%d-%y-%r")"

如果要附加到原始文件名,則需要將其包含在變數中。

source=/home/bpacheco/Test1
cp -a -- "$source" "$source-$(date +"%m-%d-%y-%r")"

如果您使用的是 bash,則可以改用大括號擴展。

cp -a /home/bpacheco/Test1{,"-$(date +"%m-%d-%y-%r")"}

如果您想將文件複製到不同的目錄,並將時間戳附加到原始文件名,您可以這樣做 -${source##*/} 擴展source沒有部分到最後一個部分的值/(它刪除與模式匹配的最長前綴*/):

source=/home/bpacheco/Test1
cp -a -- "$source" "/destination/directory/${source##*/}-$(date +"%m-%d-%y-%r")"

如果Test1是一個目錄,它會被遞歸複製,並且目錄中的文件保留它們的名稱:只有頂級目錄會附加時間戳(例如Test1/foo復製到Test1-05-10-15-07:19:42 PM)。如果您想為所有文件名附加時間戳,那就是另一個問題了。

您選擇的時間戳格式是個壞主意:人類難以閱讀且難以分類。您應該使用一種更易於閱讀且易於排序的格式,即按重要性降序排列的部分:年、月、日、小時、分鐘、秒,並在日期部分和時間部分之間進行分隔。

cp -a /home/bpacheco/Test1 "/home/bpacheco/Test2-$(date +"%Y%m%d-%H%M%S")"
cp -a /home/bpacheco/Test1 "/home/bpacheco/Test2-$(date +"%Y-%m-%dT%H%M%S%:z")"

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