यह मेरे लिए काम करता है:
$ 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