我的脚本有两个问题,该脚本复制文件并为该名称添加时间戳。
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")"
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句