При скачивании файлов wget, у него есть одна особенность работы, файл, который нам необходимо скачать, создается перед загрузкой. Другими словами, если сервер, с которого мы скачиваем, вернет ошибку, файл будет испорчен. Данная проблема актуальна в Bash скриптах.
Для решение это проблемы можно использовать механизм использования временных файлов.
Скачиваем файл во временную директорию
1 | wget "http://example.org/test.dat" -O "/tmp/test.tmp" |
Проверяем коды ошибок (если все ОК, должен вернуться 0)
1 2 3 | if [ "$?" -eq 0 ]; then #Действие с файлами fi |
Если необходимо вернуть сообщение об ошибке
1 2 3 4 5 | if [ "$?" -ne 0 ]; then rm "/tmp/test.tmpt" echo "Data download error!" exit fi |
Для примера работы, ниже приведен пример функции скачивания файла с использованием wget
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | download(){ local tmp=$(date | md5sum | head -c 20); local USERAGENT="Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:106.0) Gecko/20100101 Firefox/106.0" wget --user-agent="$USERAGENT" \ $1 \ --header="Accept: text/html" \ --keep-session-cookies \ --secure-protocol=TLSv1_3 \ --header='Accept-Language: en-us' \ -O /tmp/$tmp if [ "$?" -eq 0 ]; then cp /tmp/$tmp "$2" rm -f /tmp/$tmp else rm -f /tmp/$tmp fi } |
Пример использования
1 | download "http://example.org/test.dat" "/var/test.dat" |
Файл /var/test.dat будет обновлен(создан) только в случае успешной загрузки