Je télécharge un site avec wget et de nombreux liens sont associés à des requêtes, alors quand je fais cela:
wget -nv -c -r -H -A mp3 -nd http://url.to.old.podcasts.com/
Je me retrouve avec beaucoup de fichiers comme celui-ci:
1.mp3?foo=bar
2.mp3?blatz=pow
3.mp3?fizz=buzz
Je voudrais finir avec:
1.mp3
2.mp3
3.mp3
Tout cela se déroule sous Ubuntu Linux et j'ai wget 1.10.2.
Je sais que je peux le faire après avoir tout obtenu via un script pour tout renommer. Cependant, j'aimerais vraiment une solution dans wget afin que je puisse voir les noms corrects au fur et à mesure du téléchargement.
Quelqu'un peut-il m'aider à résoudre ce problème?
wget
commandes (sinon moins).Réponses:
Si le serveur est gentil, il peut coller un en-tête Content-Disposition sur le téléchargement pour informer 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:
Vous aurez besoin d'une nouvelle version de wget pour utiliser cette fonctionnalité.
Je n'ai aucune idée de la façon dont il gère un serveur revendiquant un nom de fichier «/ etc / passwd».
la source
?v=blah
type de version. Il peut y avoir un moyen spécifique à cloudfront de demander un document sans ceux-ci, je ne sais pas, mais je n'ai pas réussi à en trouver un, donc quelque chose comme l'une des autres réponses pourrait bien être nécessaire dans un tel cas. (Si quelqu'un connaît un moyen de dépouiller - ou de faire en sorte que Cloudfront ne serve pas - lesv=
cordes, j'aimerais en entendre parler.)J'ai réalisé après avoir traité un gros lot que j'aurais dû demander
wget
d'ignorer les chaînes de requête. Je ne voulais pas recommencer alors j'ai fait ce script qui a fonctionné pour moi:Mettez cela dans un fichier comme
rmqstr
etchmod +x rmqstr
Syntaxe:./rmqstr <directory (defaults to .)>
Il supprimera les chaînes de requête de tous les noms de fichiers de manière récursive.
la source
Je pense que, pour pouvoir
wget
enregistrer sous un nom de fichier différent de celui spécifié par l'URL, vous devez utiliser l'-O filename
argument. Cela ne fait que ce que vous voulez lorsque vous lui donnez une seule URL - avec plusieurs URL, tout le contenu téléchargé se retrouvefilename
.Mais c'est vraiment la réponse. Au lieu d'essayer de tout faire en une seule
wget
commande, utilisez plusieurs commandes. Maintenant, votre flux de travail devient:wget
pour obtenir le ou les fichiers HTML de base contenant vos liens;mp3
,http://foo/bar/baz.mp3?gargle=blaster
enbaz.mp3
wget <URL> -O <filename>
Cela résout votre problème, mais vous devez maintenant trouver comment récupérer les fichiers de base pour trouver vos
mp3
URL.Avez-vous en tête une URL de site / base particulière? Les étapes 1 et 3 seront plus faciles à gérer avec un exemple concret.
la source
D'ACCORD. Utilisez wget comme vous le faites normalement; utilisez le script post-wget que vous utilisez normalement, mais traitez la sortie de wget de manière à ce qu'elle soit plus agréable à l'oeil:
Cela affichera toujours le
?foo=bar
pendant le téléchargement, mais affichera le reste du nom en cyan brillant.la source
J'ai une approche similaire à @Gregory Wolf car son code a toujours créé des messages d'erreur comme celui-ci:
Ainsi, je vérifie d'abord s'il y a une chaîne de requête dans le nom de fichier avant de déplacer le fichier:
Cela vérifiera récursivement chaque fichier et supprimera toutes les chaînes de requête dans leurs noms de fichiers si disponibles.
la source
Regardez ces deux commandes que j'ai créées pour cloner un site, et une fois le clonage terminé, vous pouvez exécuter la deuxième commande.
La deuxième commande examinera l'intégralité du clone, recherchera les noms de modèle de fichier " ? " Et supprimera la chaîne de requête du nom de fichier.
(Voir dans GitHub Gist .)
la source
Encore plus simple: /unix/196253/how-do-you-rename-files-specifically-in-a-list-that-wget-will-use
Cela suggère une méthode qui utilise essentiellement la fonction de renommage de wget (peut être modifiée pour inclure le répertoire) pour plusieurs fichiers. Voir la deuxième version proposée.
la source