3

если я использую команду "wget --no-remove-list -P ...../debugdir/gnu// ftp:/gnu//", я получу файл .listing этого каталога. Но я должен пройти через все последующие подкаталоги, чтобы получить всю структуру. Есть ли способ получить файл .listing из всех (под) каталогов с помощью одной команды?

Также я заметил, что файл «index.html» генерируется автоматически после каждого доступа. Есть ли способ подавить это поведение?

Дело в том, что я всегда находил, что обработка Bash медленная, но после некоторого профилирования я обнаружил, что самая большая задержка - получение каждого файла .listing из последующих подкаталогов. Пример: проверка определенных расширений файлов в дереве GNU занимает около 320 секунд, из которых 290 секунд предназначены для обработки вышеуказанной команды wget.

С уважением, Франс

1 ответ1

5

Если вы хотите создать индекс FTP-сайта, то есть перечислить все подкаталоги и файлы на сайте без их фактического извлечения, вы можете сделать это:

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

где,

  • -r => рекурсивный (то есть посещать подкаталоги)
  • -x => принудительно создавать зеркальные подкаталоги на клиенте
  • --no-remove-list => оставить файлы ".listing" в каждом подкаталоге
  • --spider => посещать, но не извлекать файлы

Это создаст разреженное дерево каталогов идентичной структуры на клиенте и сервере, содержащее только файлы «.listing», показывающие содержимое (результат «ls -l») для каждого каталога. Если вы хотите переварить это в один список имен файлов с указанием пути (как вы могли бы получить из «find. -Type f»), то сделайте это в корне этого разреженного дерева каталогов:

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

который даст вам вывод, как

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

Примечание: опция «-maxdepth 999» в этом случае не нужна, я оставил ее в вызове, который я тестировал, с дополнительным ограничением: ограничить глубину дерева, о котором было сообщено. Например, если вы сканируете сайт, содержащий полные исходные деревья для нескольких проектов, например

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

тогда вам может понадобиться только набросок проектов и каталогов верхнего уровня. В этом случае вы бы указали опцию типа "-maxdepth 2".

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .