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

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

#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 

即使在那里接触,目录的ls -l中显示的时间也是文件第一次创build的时间。 如果我在bash脚本之外执行了wget或bash脚本以外的触摸,则时间更新正确。

这个问题可能是什么?

使用bellow命令可以将文件的时间戳设置为系统当前的date时间:

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

你可以尝试一下,而不是单纯的触摸命令。

另外,当你运行你的bash脚本运行:

 bash -xv your_bash_script.bash 

也尝试使用命令的完整path来validation命令的完整path:

whereis touch

既然你可以使用这个没有shell环境使用完整的path更build议确保它会运行每一个命令没有问题。

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

该文件是否正确scp'ed? (我不能评论你的问题)

如果没有,那么我认为你在这两个命令的for循环中缺less一些上传的文件path。 Prix​​指出了检查实际命令的方法。