Je télécharge un site avec wget et beaucoup de liens ont des questions qui leur sont attachées, alors quand je le fais:
wget -nv -c -r -H -A mp3 -nd http://url.to.old.podcasts.com/
Je finis avec beaucoup de fichiers comme celui-ci:
1.mp3?foo=bar
2.mp3?blatz=pow
3.mp3?fizz=buzz
Ce que j'aimerais finir avec c'est:
1.mp3
2.mp3
3.mp3
Tout cela se produit à Ubuntu Linux et j'ai Wget 1.10.2.
Je sais que je peux faire cela après que je reçois tout via un script pour renommer tout. Cependant, j'aimerais vraiment une solution à partir de Wget afin que je puisse voir les noms corrects car le téléchargement se produit.
Quelqu'un peut-il m'aider à démontrer cela?
Si le serveur est gentil, il peut s'agir d'un en-tête de disposition de contenu sur le téléchargement, conseillant votre client du nom de fichier correct. Dire wget d'écouter cet en-tête pour le nom de fichier final est aussi simple que:
wget --content-disposition
Vous aurez besoin d'une nouvelle version de Wget pour utiliser cette fonctionnalité.
Je n'ai aucune idée de la qualité d'un serveur revendiquant un nom de fichier de '/ etc/passwd'.
J'ai réalisé après avoir traité un grand lot que j'aurais dû instrument wget
d'ignorer les chaînes de requête. Je ne voulais pas le faire encore plus alors j'ai fait ce script qui a fonctionné pour moi:
# /bin/bash
for i in `find $1 -type f`
do
mv $i `echo $i | cut -d? -f1`
done
Mettez cela dans un fichier comme rmqstr
et chmod +x rmqstr
Syntaxe: ./rmqstr <directory (defaults to .)>
Il retirera les cordes de requête de tous les noms de fichiers récursives.
Je pense que, afin d'obtenir wget
pour enregistrer sous forme de nom de fichier différent de l'URL spécifie, vous devez utiliser le -O filename
argument. Cela ne fait que ce que vous voulez lorsque vous lui donnez une seule URL - avec plusieurs URL, tous les contenus téléchargés finissent par filename
.
Mais c'est vraiment la réponse. Au lieu d'essayer de tout faire dans une commande wget
, utilisez plusieurs commandes. Maintenant, votre flux de travail devient:
wget
Pour obtenir le (s) fichier HTML de base contenant vos liens;mp3
, http://foo/bar/baz.mp3?gargle=blaster
dans baz.mp3
wget <URL> -O <filename>
Cela résout votre problème, mais vous devez maintenant comprendre comment saisir les fichiers de base pour trouver votre mp3
URL.
Avez-vous un site particulier/URL de base en tête? Les étapes 1 et 3 seront plus faciles à manipuler avec un exemple concret.
je peux donc voir les noms corrects car le téléchargement se produit.
D'ACCORD. Utilisez wget comme vous le faites normalement; Utilisez le script post-wget que vous utilisez normalement, mais traitez la sortie de Wget afin que ce soit plus facile sur les yeux:
#! /bin/sh
exec wget --progress=bar:force $* 2>&1 | \
Perl -pe 'BEGIN { $| = 1 } s,(?<=`)([^\x27?]+),\e[36;1m$1\e[0m, if /^Saving/'
cgi-cut # rename files
Cela montrera toujours le ?foo=bar
Comme vous le téléchargez, mais affichera le reste du nom dans Bright Cyan.