Das funktioniert bei mir:
$ xargs -n 1 curl -O < urls.txt
Ich bin in FreeBSD. Ihre Xargs funktionieren möglicherweise anders.
Beachten Sie, dass hier sequentielle curl
s ausgeführt werden, die Sie möglicherweise als unnötig schwer ansehen. Wenn Sie einen Teil dieses Overheads sparen möchten, kann Folgendes in bash funktionieren:
$ mapfile -t urls < urls.txt
$ curl ${urls[@]/#/-O }
Dadurch wird Ihre URL-Liste in einem Array gespeichert und das Array um Optionen erweitert, curl
damit Ziele heruntergeladen werden. Der curl
Befehl kann mehrere URLs verwenden und alle abrufen, wobei die vorhandene Verbindung (HTTP / 1.1) wiederhergestellt wird. Er benötigt jedoch -O
vor jeder Option die Option, um jedes Ziel herunterzuladen und zu speichern . Beachten Sie, dass Zeichen in einigen URLs] möglicherweise maskiert werden müssen, um eine Interaktion mit Ihrer Shell zu vermeiden.
Oder wenn Sie eine POSIX-Shell anstelle von Bash verwenden:
$ curl $(printf ' -O %s' $(cat urls.txt))
Dies beruht auf printf
dem Verhalten des Wiederholens des Formatmusters, um die Liste der Datenargumente zu erschöpfen. printf
Dies werden nicht alle eigenständigen Benutzer tun.
Beachten Sie, dass diese Nicht-Xargs-Methode möglicherweise auch gegen Systembeschränkungen für sehr große Listen von URLs stößt. Untersuchen Sie ARG_MAX und MAX_ARG_STRLEN, wenn dies ein Problem darstellt .
for i in $(cat urls.txt) ; do curl -O $i ; done