Téléchargez des fichiers et créez la même structure de fichiers que la source

21

J'ai un fichier de configuration qui se compose de la liste des URI que je souhaite télécharger. Par exemple,

  http://xyz.abc.com/Dir1/Dir3/sds.exe
  http://xyz.abc.com/Dir2/Dir4/jhjs.exe
  http://xyz.abc.com/Dir1/itr.exe

Je veux lire le fichier de configuration et copier chaque URL mais en même temps créer la même structure de répertoires que sur l'hôte. Par exemple, pour la première ligne du fichier de configuration, je veux créer la structure de répertoires Dir1 / Dir3 sur ma machine locale (si elle n'existe pas), puis copier sds.exe dans ... / Dir1 / Dir3 /

J'ai trouvé que je peux télécharger toutes les URL dans un fichier en utilisant 'wget -i' mais comment puis-je créer la structure de répertoires correspondante avec ça

NGambit
la source

Réponses:

27

De man wget:

-x, --force-répertoires:

[...]

créer une hiérarchie de répertoires, même s'il n'en aurait pas été créé autrement. Par exemple, wget -x http://fly.srk.fer.hr/robots.txt enregistrera le fichier téléchargé dans fly.srk.fer.hr/robots.txt.

Chris Down
la source
Merci pour la recommandation de l'homme. Je devrais m'habituer à m'aider.
NGambit
Chris: Mais il semble que si j'ai fly.srk.fer.hr/dir1/robots.txt alors wget -x crée le répertoire fly.srk.fer.hr et y met le fichier nommé dir1 / robots.txt. Ce dont j'ai besoin, c'est qu'il crée même les sous-répertoires. ie enregistrer robots.txt dans fly.srk.fer.hr/dir1/
NGambit
@NGambit Il est impossible de créer un seul fichier nommé dir1/robots.txtsur Unix.
Chris Down le
Tu as raison. Le fichier de configuration que j'utilisais avait «\» au lieu de «/» (car il était analysé à partir d'un autre fichier basé sur Windows) dans les chemins de répertoire, ce qui gâchait les choses. Vient de remplacer le '\' par '/' et "wget ​​-x -i filename" fonctionne comme un charme
NGambit
2
Une remarque: parfois, vous voulez ignorer les premiers N dossiers dans l'URL, puis vous ajoutez:--cut-dirs=N
tokland
16

Pour obtenir la structure que vous demandez, je suggère d'utiliser aussi bien -nH que -x.

Cela supprimera le nom d'hôte et créera la structure de répertoires attendue.

par exemple

wget -x -nH http://xyz.abc.com/Dir1/Dir3/sds.exe

- 'Dir1/Dir3/sds.exe' saved [1234]

Depuis la page de manuel:

-nH
--no-host-directories
   Disable generation of host-prefixed directories.  By default, invoking Wget with -r http://fly.srk.fer.hr/ will create a structure of directories beginning with fly.srk.fer.hr/.  This option disables such behavior.

-x
--force-directories
   ...create a hierarchy of directories, even if one would not have been created otherwise...
Joe
la source