Modificar los nombres de los archivos ANTES de que wget los descargue (sin cambiar el nombre de las versiones locales)

Modificar los nombres de los archivos ANTES de que wget los descargue (sin cambiar el nombre de las versiones locales)

Tengo un sistema de archivos de un sitio web en el que cada archivo tiene dos copias, una copia resumida y una copia grande, con nombres diferentes. Por ejemplo, un archivo de copia grande podría ser páginas/info/GK2grkG23r_lg.htmlmientras que en la copia resumen se cambian las preextensiones de letras comopáginas/info/GK2grkG23r_sh.html. Estoy intentando ejecutar un wget en el sistema de archivos, pero todos los enlaces por diseño apuntan a la copia pequeña para ahorrar recursos y necesito las copias grandes. Así que mientras ejecutas wget overpaginaspuede descargar todas las copias resumidas:

pages/info/GK2grkG23r_sh.html
pages/info/2Yp58xr4Ir_sh.html
pages/info/Lmk2nIj23r_sh.html
pages/info/M23Dka6D4r_sh.html

Me gustaría cambiar los nombres de los archivos que wget descargará:

pages/info/GK2grkG23r_lg.html
pages/info/2Yp58xr4Ir_lg.html
pages/info/Lmk2nIj23r_lg.html
pages/info/M23Dka6D4r_lg.html

Aunque los archivos que wget encontrará apuntarán al primer conjunto.

Para ser claros, no quiero descargar los archivos con el primer conjunto de nombres anteriores y luego cambiarles el nombre. Quiero ejecutar wget, que luego intentará descargar la primera lista de archivos, pero cambiará ligeramente las letras para descargar la segunda lista. ¿Podemos hacer esto?

Respuesta1

Puedes probar con una solución alternativa.

Los hitos son:

  1. Descargue la lista completa de archivos y guárdela en un archivo
  2. Cambiar la parte final de los nombres de los archivos.
  3. Descargue solo los archivos con el nombre modificado.

Necesitas un archivo filter.awksimilar a este

/^--.*--  http:\/\/.*[^\/]$/ { u=$3; }
/^Length: [[:digit:]]+/ { print u; }

Paso a paso:

wget -r -np --spider http://yourhost | awk -f filter.awk  > My_List.txt
sed -i s/_sh.html/_lg.html/g My_List.txt
wget -x -i My_List.txt

Créditos:
me inspiro enesta respuesta.

Respuesta2

Primero, obtenga el archivo de índice:

wget -O index.html "$URI"

Luego, reescribe las URL que contiene:

sed -i '/_sh\(\.html\)/_lg\1/g' index.html

(Usé sed, pero es posible que prefieras, por ejemplo, un enfoque basado en XSLT. Elige).

Ahora, dígale a wget que tome todos los archivos pages/info/*, usando el archivo de índice modificado y con su ubicación original como URI base inicial:

wget --recursive --level=1 \
    --input-file=index.html --force-html --base="$URI" \
    --accept-regex 'pages/info/.*_lg\.html'

NB, la mayoría de esas opciones largas tienen alternativas cortas; consulte la página de manual. Utilicé la forma larga para mayor claridad.

información relacionada