Я работаю над сценарием bash, который извлекает файл с FTP-сайта, только если отметка времени на удаленном компьютере отличается от локальной. После того, как он помещает файл, он копирует файл на 3 других компьютера через samba (smbclient).
Все работает, но файл копируется, даже если wget -N ftp://insertsitehere.com возвращает значение, на котором находится файл. пульт был не новее. Как лучше всего проверить вывод скрипта, чтобы копирование происходило только в том случае, если с FTP была извлечена новая версия?
В идеале я хотел бы, чтобы копия на компьютеры сохраняла метку времени, как это делает команда wget -N.
Вот пример того, что у меня есть:
#!/bin/bash
OUTDIR=/cats/dogs
cd $OUTDIR
wget -N ftp://user:[email protected]/filename
if [ $? -eq 0 ]; then
HOSTS="server1 server2 server3"
for i in $HOSTS; do
echo "Uploading to $i..."
smbclient -A /root/.smbclient.authfile //$i/path -c "lcd /cats/dogs; put fiilename.txt"
if [ $? -eq 0 ]; then
echo "Upload to $i successful..."
else
echo "There was an issue uploading to host $i..."
fi
done
else
echo "There was an issue with the FTP Download...."
exit 1
fi
{}
(формат) в верхнем левом углу поля редактирования, чтобы сделать ваш код читабельным. На основе справочной страницы wget кажется, что это должно работать. Для отладки я быssh [email protected] '/bin/ls -l filename'
раньше и подтвердил, что дата действительно старше текущей. Возможны ли проблемы с часовыми поясами? Вам нужно добавить X-часовое смещение между временными метками из разных систем? Хороший первый вопрос. Продолжайте публиковать и удачи. - person shellter   schedule 26.06.2014if [ $? -eq 0 ]
возвращает true, хотя не должен? Это единственный способ вызвать smbclient, так что это должно быть правдой. Возможно,-eq 0
неправильный оператор, я используюif wget .... ; then
для устранения таких проблем. У меня нет доступа к smbclient. Надеемся, просмотревman smbclient
, вы найдете вариант, подобныйscp -p
(сохранить права доступа к файлам (и временные метки). Удачи! - person shellter   schedule 26.06.2014$?
) может бытьcd /tmp/working; wget ...; if [[ -f newFileVer ]] ; then smbclient ... ; etc ;
и избавиться от файла в/tmp/working
(или как вам нравится управлять рабочими файлами). Удачи. - person shellter   schedule 26.06.2014