Bu benim için çalışıyor:
$ xargs -n 1 curl -O < urls.txt
FreeBSD'deyim. Xarglarınız farklı çalışabilir.
Bunun curl
gereksiz yere ağır olarak görebileceğiniz sıralı e'leri çalıştırdığını unutmayın . Bu ek yükün bir kısmını kurtarmak isterseniz, bash'da aşağıdakiler işe yarayabilir:
$ mapfile -t urls < urls.txt
$ curl ${urls[@]/#/-O }
Bu, URL listenizi bir diziye kaydeder, ardından curl
hedeflerin indirilmesine neden olmak için diziyi seçeneklerle genişletir . curl
Komut birden fazla URL almak ve mevcut bağlantı (HTTP / 1.1) geri dönüşüm, hepsini getir, ama bu ihtiyacı olabilir -O
için her biri önce seçeneği indirme ve kaydetme her bir hedef. Kabuğunuzla etkileşimden kaçınmak için bazı URL'lerdeki] karakterlerin öncelenmesi gerekebileceğini unutmayın.
Veya bash yerine bir POSIX kabuğu kullanıyorsanız:
$ curl $(printf ' -O %s' $(cat urls.txt))
Bu printf
, veri bağımsız değişkenlerinin listesini tüketmek için biçim örüntüsünü tekrarlama davranışına dayanır ; tek başına printf
çalışanların hepsi bunu yapmaz.
Bu xargs olmayan yöntemin çok büyük URL listeleri için sistem sınırlarını da aşabileceğini unutmayın. Araştırma ARG_MAX ve MAX_ARG_STRLEN bu bir endişe ise.
for i in $(cat urls.txt) ; do curl -O $i ; done