Estoy descargando un sitio con wget y muchos de los enlaces tienen consultas adjuntas, así que cuando hago esto:
wget -nv -c -r -H -A mp3 -nd http://url.to.old.podcasts.com/
Termino con muchos archivos como este:
1.mp3?foo=bar
2.mp3?blatz=pow
3.mp3?fizz=buzz
Lo que me gustaría terminar es:
1.mp3
2.mp3
3.mp3
Todo esto ocurre en ubuntu linux y tengo wget 1.10.2.
Sé que puedo hacer esto después de obtener todo mediante un script para cambiar el nombre de todo. Sin embargo, realmente me gustaría una solución desde wget para poder ver los nombres correctos mientras se realiza la descarga.
¿Alguien puede ayudarme a desentrañar esto?
wget
comandos (si no menos).Respuestas:
Si el servidor es amable, podría estar pegando un encabezado de Disposición de contenido en la descarga que informa a su cliente del nombre de archivo correcto. Decirle a wget que escuche ese encabezado para el nombre de archivo final es tan simple como:
Necesitará una versión más reciente de wget para usar esta función.
No tengo idea de qué tan bien maneja un servidor que reclama un nombre de archivo de '/ etc / passwd'.
fuente
?v=blah
versiones de tipo en ellas. Puede haber alguna forma específica de frente de la nube para solicitar un documento sin estos, no lo sé, pero no pude encontrar uno, por lo que puede ser necesario algo así como una de las otras respuestas en tal caso. (Si alguien sabe de una manera de despojar, o hacer que Cloudfront no sirva, lasv=
cadenas, me encantaríaDespués de procesar un lote grande, me di cuenta de que debería haberle dado instrucciones
wget
para ignorar las cadenas de consulta. No quería volver a hacerlo, así que hice este script que funcionó para mí:Pon eso en un archivo como
rmqstr
ychmod +x rmqstr
Sintaxis:./rmqstr <directory (defaults to .)>
Eliminará las cadenas de consulta de todos los nombres de archivo de forma recursiva.
fuente
Creo que, para poder
wget
guardar como un nombre de archivo diferente al que especifica la URL, debe usar el-O filename
argumento. Eso solo hace lo que quieres cuando le das una sola URL: con varias URL, todo el contenido descargado termina enfilename
.Pero esa es realmente la respuesta. En lugar de intentar hacerlo todo en un solo
wget
comando, use varios comandos. Ahora su flujo de trabajo se convierte en:wget
para obtener los archivos HTML base que contienen sus enlaces;mp3
,http://foo/bar/baz.mp3?gargle=blaster
enbaz.mp3
wget <URL> -O <filename>
Eso resuelve su problema, pero ahora necesita descubrir cómo tomar los archivos base para encontrar sus
mp3
URL.¿Tiene en mente un sitio particular / URL base? Los pasos 1 y 3 serán más fáciles de manejar con un ejemplo concreto.
fuente
OKAY. Use wget como lo hace normalmente; use el script post-wget que usa normalmente, pero procese la salida de wget para que sea más fácil a la vista:
Esto seguirá mostrándolo
?foo=bar
mientras lo descarga, pero mostrará el resto del nombre en cian brillante.fuente
Tengo un enfoque similar a @Gregory Wolf porque su código siempre creaba mensajes de error como este:
Por lo tanto, primero verifico si hay una cadena de consulta en el nombre de archivo antes de mover el archivo:
Esto verificará recursivamente cada archivo y eliminará todas las cadenas de consulta en sus nombres de archivo, si están disponibles.
fuente
Mire estos dos comandos que creé para clonar un sitio, y después de hacer el clon, puede ejecutar el segundo comando.
El segundo comando examinará todo el clon, buscará los nombres de patrón de archivo " ? " Y eliminará la cadena de consulta del nombre del archivo.
( Véalo en GitHub Gist .)
fuente
Aún más fácil es esto: /unix/196253/how-do-you-rename-files-specífico-in-a-list-that-wget-will-use
Esto sugiere un método que esencialmente utiliza la función de cambio de nombre de wget (puede modificarse para incluir el directorio) para múltiples archivos. Ver la segunda versión propuesta.
fuente