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