Passar uma lista de URLs contidos em um arquivo para enrolar

2

Eu tenho que definir o ACL em vários arquivos. Eu baixei uma lista de objetos armazenados usando os comandos abaixo.

C:\Users\Gshrivastava\Downloads\curl_748_0>curl  -o urlname.csv -i -k -H "Authorization: HCP bXFl:29def7dbc8892a9389ebc7a5210dd844" -H "Content-Type: application/xml" -H "Accept:application/xml" -d @mqe.xml "http://tenant.hcp3.hdsblr.com/query?prettyprint

Eu, então, classifiquei nomes de url em um arquivo de texto.

ns.tenant.hcp3.hdsblr.com/rest/pic/Cat/images.jpg 
ns.tenant.hcp3.hdsblr.com/rest/pic/Cat/6.png 
ns.tenant.hcp3.hdsblr.com/rest/pic/landscape/9.png 
ns.tenant.hcp3.hdsblr.com/rest/pic/landscape/5.png  

conteúdo do arquivo de texto >

Agora, quero usar esse arquivo como argumento ou variável para que todos os nomes de arquivos sejam definidos com o ACL.

curl.exe -k http://ns.tenant.hcp3.hdsblr.com/rest/ACL/filename.ext/?type=acl -i -H "Authorization: HCP YWRtaW4=:29def7dbc8892a9389ebc7a5210dd844" -T acl.xml 
    
por Gaurav Shrivastava 09.05.2016 / 12:11

2 respostas

5

Se eu entendi corretamente, você tem um arquivo contendo uma lista de URLs (um por linha) e deseja passar esses URLs para o CURL.

Existem duas maneiras principais de fazer isso: com xargs ou com command substitution . Com xargs :

xargs <urls.txt curl …

Com a substituição de comandos:

curl … $(cat urls.txt)

Ambos os métodos manipulam alguns caracteres especiais, mas, considerando quais caracteres são válidos em URLs, isso não deve ser um problema, exceto que, com xargs , aspas simples ( ' ) precisam ser codificadas como %27 . Como alternativa, use xargs -l .

Note que, como este é um site Unix, estou assumindo que você está executando uma variante Unix e chamando esses comandos de um shell Unix, como o bash. Como você está executando curl.exe , parece estar usando o Windows. Se você for usar ferramentas Unix, eu recomendo que você faça isso de um shell Unix como bash ou zsh; O Windows não vem com xargs mais do que com curl , e cmd não tem substituição de comando (pelo menos não da mesma forma). Provavelmente, existe uma maneira de fazer isso com as ferramentas do Windows, mas não sei o que é e está fora do tópico aqui.

Além disso, se você estiver usando ferramentas Unix no Windows, tome cuidado para que sua lista de URLs use finais de linha do Unix (apenas LF), e não terminações de linha do Windows (CR + LF). As ferramentas do Unix esperam que uma linha termine com o LF e trate o CR como um caractere comum. Para obter mais informações, consulte Os diretórios são listados duas vezes e muitas outras perguntas sobre este site.

    
por 10.05.2016 / 02:50
1

o curl tem as opções -K, nas quais você pode passar várias URLs, leituras de um arquivo que tenha este formato:

url = url1
# Uncomment if you want to download the file 
# output = "file1"
# Uncomment if your sysadmin only allows well known User Agent 
# user-agent = "Mozilla/5.0"

Além disso, você pode usar xargs (estilo wget-i)

$ xargs -a urls.txt -I{} curl -# -O {} 

Usando o HEREDOC

curl -# -K - <<URL
    url = "https://download.libsodium.org/libsodium/releases/libsodium-1.0.16.tar.gz"
    output = "libsodium-1.0.16.tar.gz"

    url = "https://download.libsodium.org/libsodium/releases/libsodium-1.0.16.tar.gz.sig"
   output="libsodium-1.0.16.tar.gz.sig"
URL

Referência

    
por 28.12.2017 / 05:27