我有以下问题。 我有一个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指出了检查实际命令的方法。