Назад | Перейти на главную страницу

Отметка времени файла не меняется даже при касании

У меня следующая проблема. У меня есть сценарий 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

Даже при наличии касания время, указанное в ls -l каталога, - это время первого создания файла. Если я выполняю wget вне сценария bash или касаюсь вне сценария bash, время обновляется правильно.

В чем может быть проблема?

возможно /bin/touch -m $upload_file лучше подходит, так как он изменяет время модификации на текущее время.

Используя приведенную ниже команду, можно установить метку времени файла на текущее время и дату в вашей системе:

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

Вы можете попробовать это вместо простой команды касания.

Также, когда вы запускаете свой сценарий bash, запускайте:

bash -xv your_bash_script.bash

также попробуйте использовать полный путь к вашим командам, чтобы проверить полный путь к команде:

whereis touch

Поскольку вы можете использовать это без среды оболочки, рекомендуется использовать полный путь, чтобы убедиться, что он запускает каждую команду без проблем.

Правильно ли загружен файл в формате scp? (Я не могу комментировать ваш вопрос)

Если нет, то я думаю, что вам что-то не хватает в пути к загруженному файлу в цикле for для обеих команд. Прикс указывает способ проверки реальных команд.