J'utilise cette commande:
cat urls.txt | xargs -n 1 -P 10 wget -q
pour télécharger des fichiers texte d'URL. Cela a bien fonctionné lorsque mon fichier URL était comme:
http://domain1.com/page.html
http://domain2.com/page.html
http://domain3.com/page.html
Cependant, je dois maintenant télécharger des fichiers texte d'URL et publier des données, comme:
--post-data '1=1' http://domain1.com/page.html
--post-data '1=1' http://domain2.com/page.html
--post-data '1=1' http://domain3.com/page.html
Lorsque vous utilisez la commande cat ci-dessus, il essaie de télécharger l'URL, puis les données de publication sous forme d'URL. par exemple. dans l'exemple ci-dessus, il téléchargerait http://domain1.com/page.html puis essaierait de télécharger --post-data 1 = 1, puis http: // domain2 .com/page.html et ainsi de suite.
Existe-t-il de toute façon que chat envoie chaque ligne des fichiers URL uniquement?
Mise à jour : J'ai trouvé cela en ajoutant un échappement à l'espace comme:
--post-data '1=1'\ http://domain1.com/page.html
le fait être traité comme une seule URL, mais le - semble être supprimé de l'argument --post-data.
Pour que xargs
exécute votre commande une fois pour chaque ligne d'entrée, donnez-lui la -L 1
option (et supprimez le -n 1
, car ils s'excluent mutuellement). Le document de normes pour xargs dit ceci:
-L number
The utility shall be executed for each non-empty number lines of arguments
from standard input. A line is considered to end with the first <newline>
unless the last character of the line is a <blank>; a trailing <blank>
signals continuation to the next non-empty line, inclusive.
Ouvrez le terminal et exécutez:
cat urls.txt | sed "s/[\"\<\>' \t\(\);]/\n/g" | grep "http://" | sort -u | xargs -n 1 -P 10 wget -q
Vous n'avez pas besoinxargs
, vous pouvez le faire avec une simple boucle bash Soit garder vos URL comme une simple liste et ajouter les options directement à wget
:
while IFS= read -r url; do wget --post-data '1=1' "$url"; done < urls.txt
ou incluez-les dans le fichier et passez-les à wget
:
while IFS= read -r url; do wget "$url"; done < urls.txt