यह मेरे लिए काम करता है:
$ xargs -n 1 curl -O < urls.txt
मैं FreeBSD में हूँ। आपके xargs अलग तरीके से काम कर सकते हैं।
ध्यान दें कि यह क्रमिक रूप से चलता है curl
, जिसे आप अनावश्यक रूप से भारी देख सकते हैं। यदि आप उस ओवरहेड में से कुछ को बचाना चाहते हैं, तो निम्नलिखित बाश में काम कर सकता है:
$ mapfile -t urls < urls.txt
$ curl ${urls[@]/#/-O }
यह आपकी URL सूची को एक सरणी में सहेजता है, फिर curl
लक्ष्य को डाउनलोड करने के कारण सरणी को विस्तृत करता है । curl
आदेश एकाधिक यूआरएल ले जा सकते हैं और उन सभी को लाने, मौजूदा कनेक्शन (HTTP / 1.1) रीसाइक्लिंग, लेकिन यह जरूरत -O
के क्रम में हर एक से पहले विकल्प डाउनलोड और सेव प्रत्येक लक्ष्य। ध्यान दें कि कुछ URL के अक्षर] आपके शेल के साथ बातचीत करने से बचने के लिए बच सकते हैं।
या यदि आप बैश के बजाय पोसिक्स शेल का उपयोग कर रहे हैं:
$ curl $(printf ' -O %s' $(cat urls.txt))
यह printf
डेटा तर्कों की सूची को समाप्त करने के लिए प्रारूप पैटर्न को दोहराने के व्यवहार पर निर्भर करता है; सभी स्टैंड-अलोन printf
एस ऐसा नहीं करेंगे।
ध्यान दें कि यह गैर-xargs पद्धति URL की बहुत बड़ी सूची के लिए सिस्टम सीमाओं के विरुद्ध भी टकरा सकती है। अगर यह एक चिंता है तो ARG_MAX और MAX_ARG_STRLEN पर रिसर्च करें।
for i in $(cat urls.txt) ; do curl -O $i ; done