Как пропустить уже существующие файлы при загрузке с помощью curl?

Я хочу curl чтобы загрузить ссылку, но я хочу, чтобы она пропускала файлы, которые уже существуют. Сейчас, строки кода, я буду продолжать его заменить никакое mater что:

curl '$url' -o /home/$outputfile &>/dev/null &

как этого можно добиться?

4 ответов


вы можете просто позвонить в curl внутри if блок:

if ! [ -f /home/$outputfile ]; then
  curl -o /home/$outputfile "url"
fi

Также обратите внимание, что в вашем примере, у вас есть $url внутри одинарных кавычек, которые не делают то, что вы хотите. Сравнить:

echo '$HOME'

в:

echo "$HOME"

и curl есть --silent опция, которая может быть полезна в скриптах.


используйте wget с --no-clobber вместо:

-nc, --no-clobber: пропустить загрузки, которые будут загружаться в существующие файлы.

пример:

wget -nc -q -O "/home/$outputfile" "$url" 

вы можете использовать опцию curl -C -. Этот параметр используется для возобновления прерванной загрузки, но будет пропускать загрузку, если файл уже завершен. Обратите внимание, что аргумент -C одиночное тире. Недостатком может быть то, что curl все еще кратко связывается с удаленным сервером, чтобы запросить размер файла.


на curl может поддерживать пропуск файлов, когда вы используете его с -O и -J, но его поведение непоследовательно.

на -J (--remote-header-name) указывает -O (--remote-name) возможность использовать указанный сервер Content-Disposition filename вместо извлечения имени файла из URL-адреса. Таким образом,curl на самом деле не знает, какое имя файла вернет сервер, поэтому он может игнорировать существующий файл для предосторожности.

источник: Re: - J "отказ от перезаписи..."

например:

$ curl -LJO -H 'Accept: application/octet-stream' 'https://api.github.com/repos/x/y/releases/assets/12345
Warning: Refusing to overwrite my_file.bin: File 
Warning: exists
curl: (23) Failed writing body (0 != 16384)

однако, как уже упоминалось, его поведение непредсказуемо, и он не работает для всех файлов.