Shell-Script
複製文件並附加時間戳
我的腳本有兩個問題,即復製文件並向名稱添加時間戳。
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")"