Bri*_*ian 16 shell-script date file-copy timestamps
我的脚本有两个问题,用于复制文件并向名称添加时间戳。
cp -ra /home/bpacheco/Test1 /home/bpacheco/Test2-$(date +"%m-%d-%y-%T")
Run Code Online (Sandbox Code Playgroud)
以上添加Test2
为文件名,但我希望它保留原始源文件的文件名,在本例中名为Test
.
cp -ra /home/bpacheco/Test1 /home/bpacheco/Test2-$(date +"%m-%d-%y-%r")
Run Code Online (Sandbox Code Playgroud)
另一个问题是,当我添加%r
时间戳代码时,我收到错误消息,指出目标“PM”不是目录。我试图将时间戳记为 12 小时制。
Gil*_*il' 15
您的问题之一是您省略了命令替换周围的双引号,因此命令的输出date
以空格分隔。请参阅为什么我的 shell 脚本会因空格或其他特殊字符而阻塞?这是一个有效的命令:
cp -a /home/bpacheco/Test1 "/home/bpacheco/Test2-$(date +"%m-%d-%y-%r")"
Run Code Online (Sandbox Code Playgroud)
如果要附加到原始文件名,则需要将其放在变量中。
source=/home/bpacheco/Test1
cp -a -- "$source" "$source-$(date +"%m-%d-%y-%r")"
Run Code Online (Sandbox Code Playgroud)
如果您使用 bash,则可以改用大括号扩展。
cp -a /home/bpacheco/Test1{,"-$(date +"%m-%d-%y-%r")"}
Run Code Online (Sandbox Code Playgroud)
如果您想将文件复制到不同的目录,并将时间戳附加到原始文件名,您可以这样做 -${source##*/}
扩展到source
没有部分的值直到最后/
(它删除与模式匹配的最长前缀*/
):
source=/home/bpacheco/Test1
cp -a -- "$source" "/destination/directory/${source##*/}-$(date +"%m-%d-%y-%r")"
Run Code Online (Sandbox Code Playgroud)
如果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")"
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
60233 次 |
最近记录: |