40 votes

Comment puis-je demander à wget de renommer les fichiers téléchargés pour ne pas inclure la chaîne de requête ?

Je télécharge un site avec wget et beaucoup de liens ont des requêtes 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 obtenir, c'est :

1.mp3
2.mp3
3.mp3

Tout cela se passe dans ubuntu linux et j'ai wget 1.10.2.

Je sais que je peux le faire après avoir tout téléchargé via un script pour renommer tout. Cependant, j'aimerais vraiment une solution depuis wget pour pouvoir voir les noms corrects pendant le téléchargement.

Est-ce que quelqu'un peut m'aider à résoudre cela?

1voto

elkiwy Points 11

J'ai une approche similaire à celle de @Gregory Wolf car son code créait toujours des messages d'erreur comme celui-ci :

mv: './file' et './file' sont le même fichier

Je vérifie donc d'abord s'il y a une chaîne de requête dans le nom de fichier avant de déplacer le fichier :

for f in $(find $1 -type f); do
    if [ $f = ${f%%\?*} ]; then continue; fi
    mv "${f}" "${f%%\?*}"
done

Cela vérifiera de manière récursive chaque fichier et supprimera toutes les chaînes de requête dans leurs noms de fichiers si elles sont présentes.

1voto

TrYde Points 21

Pour renommer correctement les fichiers, vous devez tenir compte des espaces dans le nom de fichier, ce qui est une possibilité et perturbera la boucle for.

Voici une version améliorée :

find . -type f -name "*\?*" -print0 | 
while IFS= read -r -d '' file; 
do 
    mv -f "$file" "`echo $file | cut -d? -f1`"; 
done

Cela garantit que les fichiers avec des espaces sont correctement gérés par la boucle (en utilisant \0 comme délimiteur) et par la commande mv (entre guillemets)

Il n'y avait que quelques cas complexes où cela n'a pas fonctionné mais sinon c'est la meilleure option.

-2voto

robcore Points 1

Encore plus simple est celui-ci: 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 renommer de wget (qui peut être modifiée pour inclure un répertoire) pour plusieurs fichiers. Voir la deuxième version proposée.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X