wget - apenas obtendo o arquivo .listing em cada subdiretório

3

se eu usar o comando "wget --no-remove-listing -P ..... / debugdir / gnu //fold: / gnu //" eu irei pegar o arquivo .listing desse diretório. Mas eu tenho que percorrer cada subdiretório subseqüente para obter toda a estrutura. Existe uma maneira de obter o arquivo .listing de todos os diretórios (sub) com um comando?

Além disso, notei que o arquivo "index.html" é gerado automaticamente após cada acesso. Existe uma maneira de suprimir esse comportamento?

O fato é que sempre achei o processamento de Bash lento, mas depois de alguns perfis, descobri que o maior atraso está em obter cada arquivo .listing de sub-diretórios subseqüentes. Exemplo: a verificação de extensões de arquivo específicas na árvore GNU leva cerca de 320 segundos, dos quais 290 segundos são para processamento do comando wget acima.

Atenciosamente, Frans

    
por Frans 11.05.2012 / 23:22

1 resposta

5

Se você deseja criar um índice de um site FTP, ou seja, listar todos os subdiretórios e arquivos no site sem realmente recuperá-los, faça o seguinte:

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

onde

  • -r = > recursivo (por exemplo, visitar subdiretórios)
  • -x = > forçar subdiretórios de espelho a serem criados no cliente
  • - no-remove-listing = > deixar arquivos ".listing" em cada subdiretório
  • - spider = > visite, mas não recupere arquivos

Isso criará uma árvore de diretórios esparsa de estrutura idêntica no cliente como o servidor, contendo apenas arquivos ".listing" mostrando o conteúdo (o resultado de "ls -l") para cada diretório. Se você quiser digerir isso em uma única lista de nomes de arquivos qualificados para o caminho (como você obteria de "find. -Type f"), faça isso na raiz dessa árvore de diretórios esparsos:

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

que lhe dará saída como

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: a opção "-maxdepth 999" não é necessária neste caso de uso, deixei-a na invocação que estava testando que tinha uma restrição adicional: para limitar a profundidade da árvore que foi relatada. Por exemplo, se você digitalizar um site que contenha árvores de origem completas para vários projetos, como

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

você pode querer apenas um esboço dos projetos e dos diretórios de nível superior. Nesse caso, você daria uma opção como "-maxdepth 2".

    
por 21.01.2014 / 22:44