5 votes

wget - ne récupère que le fichier .listing dans chaque sous-répertoire

Si j'utilise la commande

wget --no-remove-listing -P ...../debugdir/gnu/<dir>/ ftp:<ftp-site>/gnu/<dir>/

Je vais chercher le .listing de ce répertoire. Mais je dois passer par tous les sous-répertoires suivants pour obtenir la structure complète. Existe-t-il un moyen d'obtenir le .listing de tous les (sous-)répertoires avec une seule commande ?

De plus, j'ai remarqué que le fichier index.html est automatiquement généré après chaque accès. Existe-t-il un moyen de supprimer ce comportement ?

Le problème est que j'ai toujours trouvé que le traitement de Bash était lent, mais après un peu de profilage, j'ai découvert que le délai le plus important est celui de l'obtention de chaque fichier de données. .listing à partir des sous-répertoires suivants.

Exemple : la vérification d'extensions de fichiers spécifiques dans l'arborescence GNU prend environ 320 secondes, dont 290 secondes pour le traitement de l'exemple ci-dessus. wget commandement.

5voto

Ed Gillett Points 66

Si vous cherchez à construire l'index d'un site FTP, c'est-à-dire à dresser la liste de tous les sous-répertoires et fichiers du site sans les récupérer, vous pouvez le faire :

wget -r -x --no-remove-listing --spider ftp://ftp.example.com/

où,

  • -r => récursif (i.e. visite les sous-répertoires)
  • -x => force la création des sous-répertoires du miroir sur le client
  • --no-remove-listing => laisser les fichiers ".listing" dans chaque sous-répertoire
  • --spider => visite mais ne récupère pas les fichiers

Cela créera une arborescence de répertoires épars de structure identique sur le client et le serveur, contenant uniquement des fichiers ".listing" montrant le contenu (le résultat de "ls -l") de chaque répertoire. Si vous voulez digérer cela en une seule liste de noms de fichiers qualifiés de chemin (comme vous le feriez avec "find . -type f"), faites-le à la racine de cette arborescence de répertoires épars :

find . -type f -exec dos2unix {} \;
( find . -maxdepth 999 -name .listing -exec \
awk '$1 !~ /^d/ {C="date +\"%Y-%m-%d %H:%M:%S\" -d \"" $6 " " $7 " " $8 "\""; \
C | getline D; printf "%s\t%12d\t%s%s\n", D, $5, gensub(/[^/]*$/,"","g",FILENAME), $9}' \
{} \; 2>/dev/null ) | sort -k4

ce qui vous donnera un résultat comme

2000-09-27 00:00:00       261149    ./README
2000-08-31 00:00:00       727040    ./foo.txt
2000-10-02 00:00:00      1031115    ./subdir/bar.txt
2000-11-02 00:00:00      1440830    ./anotherdir/blat.txt

NB : l'option "-maxdepth 999" n'est pas nécessaire dans ce cas d'utilisation, je l'ai laissé dans l'invocation que je testais qui avait une contrainte supplémentaire : limiter la profondeur de l'arbre qui était rapporté. Par exemple, si vous analysez un site qui contient des arbres de sources complets pour plusieurs projets, comme

./foo/Makefile
./foo/src/...
./foo/test/...
./bar/Makefile
./bar/src/...
./bar/test/...

alors vous pourriez ne vouloir qu'un aperçu des projets et des répertoires de premier niveau. Dans ce cas, vous donnerez une option comme "-maxdepth 2".

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