即使触摸,文件时间戳也不会改变

即使触摸,文件时间戳也不会改变

我遇到了以下问题。我有一个 bash 脚本,它使用 wget 从构建服务器获取一些文件,然后将它们 scp 到生产系统:以下是相关代码片段:

#Several of these lines
wget -nv -O birt_reports.zip "http://buildserver:8111/guestAuth/repository/download/bt6/.lastFinished/birt_reports.zip"

#files in the for loop left out for simplicity
for upload_file in "birt_reports.zip"; do

    scp -B -i /root/$keyfile  $upload_file $user@gateway:/home/$user/deploy_staging
    touch $upload_file
done

即使有 touch,目录中 ls -l 中显示的时间也是文件首次创建的时间。如果我在 bash 脚本之外执行 wget 或在 bash 脚本之外执行 touch,时间就会正确更新。

可能是什么问题?

答案1

使用下面的命令将文件的时间戳设置为系统当前日期时间:

touch -t `date +%y%m%d%H%M.%S` /path/to/filename

您可以尝试它,而不是仅仅使用普通的触摸命令。

另外,当你运行 bash 脚本时,请运行:

bash -xv your_bash_script.bash

还可以尝试使用命令的完整路径,以验证命令的完整路径:

whereis touch

由于您可能在没有 shell 环境的情况下使用它,因此建议使用完整路径以确保它能够顺利运行每个命令。

答案2

也许/bin/touch -m $upload_file更适合,因为它将修改时间更改为当前时间。

答案3

文件是否被正确 scp 了?(我无法评论你的问题帖子)

如果不是,那么我认为您在两个命令的 for 循环中遗漏了上传文件路径的某些内容。Prix 指出了检查实际命令的方法。

相关内容