如何使用包含文件名中原始时间戳的新名称制作文件的副本?

时间:2016-07-24 16:03:04

标签: linux bash unix scripting

编写一个bash脚本,将文件复制到新副本具有相同名称但在文件名后附加时间戳的目录(扩展名之前)。

我怎样才能做到这一点?

3 个答案:

答案 0 :(得分:1)

将文件本身的时间戳插入原始文件名,并在目标文件中保留该时间戳,以下内容适用于GNU环境:

file="/some/dir/path-to-file.xxx";
cp -p "$file" "${file%.*}-$(date -r"$file" '+%Y%m%d-%H%M%S').${file##*.}"

在mix中正确使用basename(1)命令可以将文件复制到另一个目录中。

在GNU / Linux环境之外执行此操作更具挑战性,您必须开始访问awk,perl,python甚至php等语言来替换date -r命令。

答案 1 :(得分:0)

假设

var="/path/to/filename.ext" #path is optional

待办事项

var1="${var##*/}
cp "$var" "/path/to/new/directory/${var1%.*}$(date +%s).${var1##*.}"

有关${var%.*}& ${var##*.},请参阅[ shell parameter expansion ]

日期联机帮助页说:

%s seconds since 1970-01-01 00:00:00 UTC

答案 2 :(得分:0)

file="file_to_copy"
cp $file "/path/to/dest/$file"`stat --printf "%X" $file`

您可以查看stat(man 1 stat)的手册页,为您的需求选择合适的时间戳(创建,上次访问等)。

在这个例子中,我选择了%X,这意味着time of last access, seconds since Epoch