web-dev-qa-db-fra.com

Liste de téléchargement wget vers des répertoires spécifiques

Je voudrais créer un script court mais doux pour que wget utilise un fichier .list. Le problème, c'est que j'aimerais définir des répertoires dans lesquels ces fichiers vont.

Exemple:

file: url.list
[group 1]
http://www.somehost.com/files/tool.7z
http://www.someotherhost.com/files/icon36.png

[group 2]
http://www.idunno.net/other-tool.tar.gz
http://265.265.265.265/config.ini
http://www.myownsite.com/tools/script-to-run-tool.cmd
eof

([groupe 1] et [groupe 2] ne sont là que pour la lisibilité, ils ne sont pas dans mon vrai fichier liste) (ouais je sais que 265 n'est pas réel, c'est pourquoi c'est un exemple)

commande (en cours d'utilisation qui ne peut pas analyser les dossiers) wget --continue --timestamping --content-disposition -i url.list

Bien sûr, cela télécharge actuellement les 5 fichiers dans le même répertoire. Ma question est la suivante: existe-t-il un moyen d'indiquer à wget d'utiliser un dossier différent pour le groupe 1, et pour le groupe 2, dans mon cas, j'aimerais saisir plusieurs outils que j'utilise au travail, j'ai un script distinct dans Windows cela crée une clé usb winpe et injecte tous les outils de ces répertoires dans la clé.

Donc, ma dernière question, est-ce que cela peut être fait très facilement, ou est-ce que cela nécessite que je l’utilise avec un script bash complet pour les récupérer et créer les dossiers dans lesquels ils vont les déplacer? (utiliser -o dans les vis wget avec mon horodatage, et les horodatages sont essentiels à la mission)

en théorie, lorsque cela se terminera, j'aimerais avoir une nouvelle copie de (noms de pseudos):

tools/cool-tool/tool.7z
tools/cool-tool/icon36.png

tools/special-tool/other-tool.tar.gz
tools/special-tool/config.ini
tools/special-tool/script-to-run-tool.cmd
1
Tandy1k

Créez une liste contenant l'URL et le répertoire cible sur la même ligne:

http://www.somehost.com/files/tool.7z tools/cool-tool/
http://www.someotherhost.com/files/icon36.png tools/cool-tool/
http://www.idunno.net/other-tool.tar.gz tools/special-tool/
http://265.265.265.265/config.ini tools/special-tool/
http://www.myownsite.com/tools/script-to-run-tool.cmd tools/special-tool/

Ensuite, utilisez une boucle bash pour lire le fichier et le transmettre à wget:

while read url target; do 
  wget "$url" -P "$target";
done < url.list
3
terdon

Vous devriez pouvoir faire ce que vous voulez avec les options wget -P ou --directory-prefix

   -P prefix
   --directory-prefix=prefix
       Set directory prefix to prefix.  The directory prefix is the
       directory where all other files and subdirectories will be saved
       to, i.e. the top of the retrieval tree.  The default is . (the
       current directory).

Il existe un certain nombre d’autres options permettant de contrôler la manière dont les composants du répertoire source sont gérés, ce qui peut également être utile si vous téléchargez des fichiers individuels ou utilisez des wgets récursifs - voir la section Directory Options des pages de manuel wget.

1
steeldriver

Je suis venu avec ceci:

wgetfiles.sh:

filename="$1"

while read -r line
do
    if [[ "$line" =~ (https?|ftp)\:\/\/ ]]
        then
            wget "$line" -P "$currdir";
        else
            currdir="$line"
            if [ ! -d "$currdir" ]; then
                mkdir "$currdir"
            fi
    fi
done < "$filename"

pour un fichier texte de n'importe quel nom:

file.txt:

Dir 1
http://www.somehost.com/files/tool.7z tools/cool-tool/
https://www.someotherhost.com/files/icon36.png tools/cool-tool/
Dir 2
http://www.idunno.net/other-tool.tar.gz tools/special-tool/
https://265.265.265.265/config.ini tools/special-tool/
Dir 3
ftp://www.myownsite.com/tools/script-to-run-tool.cmd tools/special-tool/

Cela permet d'utiliser n'importe quel fichier texte contenant le nom du répertoire suivi de plusieurs liens. Il crée les répertoires s’ils n’existent pas déjà. Aucune vérification n’est effectuée alors assurez-vous d’avoir des répertoires suivis de liens comme indiqué.

Juste un petit ajout. Cette ligne couvrira de nombreuses situations:

wget "$line" -e robots=off -r -l 1 -nd -nc --wait 1 −−random−wait -R html,"index.*"  -P "$currdir"

Il ignorera robots.txt (-e robots=off), recurse dans un répertoire au cas où le lien est vers un répertoire (-r -l 1), ne téléchargera pas la hiérarchie des répertoires à partir du site - seuls les fichiers (-nd), ne téléchargera pas les fichiers déjà téléchargés (-nc), attendra au hasard de télécharger le fichier suivant pour s'assurer davantage contre le rejet du site (--wait 1 −−random−wait), et ne téléchargez html fichiers ou fichiers de la forme index.* (-R html,"index.*").

Aussi, pour créer une hiérarchie de répertoires comme Dir 1/subdir 1/sub-subdir 1:

mkdir -p "$currdir"
0
hmj6jmh