1 votos

Busque y descargue un archivo específico que esté en uno de varios directorios

Estoy intentando que WGET descargue el archivo específico llamado 5200r.img . El archivo está en uno de los tres directorios ubicados en la siguiente dirección:

 https://pds-imaging.jpl.nasa.gov/data/galileo/galileo_orbiter/go_0020/e14/europa/
 

Los directorios son c044094 , c044095 y c044098 .

¿Cómo le pido a WGET que busque en cada uno de estos tres directorios el 5200r.img y lo descargue?

0voto

Kamil Maciorowski Puntos 897
#!/bin/bash

address='https://pds-imaging.jpl.nasa.gov/data/galileo/galileo_orbiter/go_0020/e14/europa'
possibilities=( c044094 c044095 c044098 )
file='5200r.img'

for possibility in "${possibilities[@]}"
do
   wget "$address/$possibility/$file" && break
done

El script va a construir una Url completa y probarlos uno por uno. El éxito de la primera descarga de salida (break) del bucle.


Has etiquetado así que usa un arreglo para almacenar las posibilidades. Más versión portátil podría ser:

#!/bin/sh

address='https://pds-imaging.jpl.nasa.gov/data/galileo/galileo_orbiter/go_0020/e14/europa'
possibilities="c044094 c044095 c044098"
file='5200r.img'

for possibility in $possibilities
do
   wget "$address/$possibility/$file" && break
done

Funciona porque la palabra de la división y el nombre de ruta de expansión en $possibilities generar lo que quiera; pero esto es sólo porque sus posibilidades son "lo suficientemente bueno". En general (olvídate de las direcciones Url) es posible que desee para tratar con las posibilidades que contengan *, ?, de los espacios, comillas, etc. Este código

possibilities='/etc/* "two words" foo'
for possibility in $possibilities
do …

se ampliará /etc/* y el uso de "two y words" por separado. A menudo esto no es lo que usted desea. Una matriz en Bash es muy bueno en tal caso. Si usted necesita una solución para sh (que no tiene el concepto de matrices), considera que este enfoque:

#!/bin/sh

while IFS= read -r possibility; do
   printf '%s\n' "$possibility"
   # or whatever you want to do
done << EOF
/etc/*
*.???
multiple words   with spaces
   leading spaces
" quotes '
EOF

En los anteriores fragmentos de 5200r.img está codificado. Uso file="$1" en lugar de file='5200r.img', así que usted puede descargar otros archivos en una forma conveniente, como este:

./name_of_script 4852r.img

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: