Je télécharge un site avec wget et beaucoup de liens ont des questions qui leur sont attachées, alors quand je fais ceci:
wget -nv -c -r -H -A mp3 -nd http://url.to.old.podcasts.com/
Je me retrouve avec beaucoup de fichiers comme ceci:
1.mp3?foo=bar 2.mp3?blatz=pow 3.mp3?fizz=buzz
Ce que je voudrais terminer est:
1.mp3 2.mp3 3.mp3
Tout cela se déroule dans Linux Linux et j'ai wget 1.10.2.
Je sais que je peux le faire après avoir tout par un script pour renommer tout. Cependant, j'aimerais vraiment une solution à partir de wget afin que je puisse voir les noms corrects à mesure que le téléchargement se déroule.
Quelqu'un peut-il m'aider à démêler cela?
Si le serveur est gentil, cela pourrait contenir un en-tête Content-Disposition sur le téléchargement pour informer votre client du nom de fichier correct. Raconter à 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 façon dont il gère un serveur demandant un nom de fichier de '/ etc / passwd'.
Je me suis rendu compte après avoir traité un gros lot que j'avais demandé à wget
d'ignorer les chaînes de requêtes. Je ne voulais pas le faire encore une fois, alors j'ai fait ce script qui m'a fonctionné:
# /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 supprimera récursivement les chaînes de requêtes de tous les noms de fichiers.
Je pense que, pour que wget
puisse être enregistré en tant que nom de fichier différent de l'URL spécifié, vous devez utiliser l'argument -O filename
. Cela ne fait que ce que vous voulez lorsque vous lui donnez un seul URL – avec plusieurs URL, tout le contenu téléchargé se retrouve dans le filename
de filename
.
Mais c'est vraiment la réponse. Au lieu d'essayer de le faire tout en une seule commande, utilisez plusieurs commandes. Maintenant, votre flux de travail devient:
wget
pour obtenir les fichiers 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 maintenant, vous devez comprendre comment saisir les fichiers de base pour trouver vos URL mp3
.
Avez-vous une URL de site / base particulière à l'esprit? Les étapes 1 et 3 seront plus faciles à manipuler avec un exemple concret.
Afin que je puisse voir les noms corrects à mesure que le téléchargement se produit.
D'ACCORD. Utilisez wget comme vous le faites habituellement; Utilisez le script post-wget que vous utilisez normalement, mais procédez à la sortie de Wget afin qu'il soit plus facile pour 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 la ?foo=bar
que vous téléchargez, mais affichera le reste du nom en cyan clair.
C'est encore plus facile: https://unix.stackexchange.com/questions/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.