Существует ли способ отключить wget от получения файлов от родительских каталогов до данной глубины?

При использовании Bash 4 + можно сделать:

#!/bin/bash
shopt -s globstar
for fname in **/*; do 
  if [ -f "$fname" ]; then
    mv ...
  fi
done

От хакера Bash Wiki:

Существует новая опция оболочки globstar. При включении Bash выполнит рекурсивный globbing на ** – это означает, что он соответствует всем каталогам и файлам от текущей позиции в файловой системе, скорее это только текущий уровень.

http://wiki.bash-hackers.org/bash4

10
16.12.2011, 10:50
4 ответа

Я не попробовал его, но использующий-I, и-X мог дать Вам, что Вы хотите. Мои первые попытки приехали бы строка

wget -m -I bar1/bar2 -X "*" http://www.foo.com/bar1/bar2/bar3/index.html

Объяснение опций:

-m: 
   --mirror
       Turn on options suitable for mirroring.  This option turns on recursion and time-stamping, sets
       infinite recursion depth and keeps FTP directory listings.  It is currently equivalent to -r -N -l
       inf --no-remove-listing.
-I: list
   --include-directories=list
       Specify a comma-separated list of directories you wish to follow when downloading.  Elements of
       list may contain wildcards.
-X: list
   --exclude-directories=list
       Specify a comma-separated list of directories you wish to exclude from download.  Elements of list
       may contain wildcards.
12
27.01.2020, 20:01

Возможно, я пропускаю что-то, но если, именно это Вы хотите затем

wget -c -np -r www.foo.com/bar1/bar2

работы для меня (использование Вашего примера). Конечно, с теми опциями Вы получите всю структуру каталогов выше этого также, от www.foo.com на вниз. Если Вы просто хотите bar2 на верхнем уровне затем сделайте

wget -c -np -r -nH --cut-dirs=1 www.foo.com/bar1/bar2

-nH избавляется от www.foo.com, и --cut-dirs=1 избавляется от bar1, таким образом, Вы доберетесь bar2 и его подкаталоги, загруженные на текущий каталог. Для получения дополнительной информации посмотрите man wget, который довольно читаем и имеет примеры.

1
27.01.2020, 20:01
  • 1
    Вы опустили начальную точку, необходимо перейти по ссылкам. Вы предположили, что начальная точка является одновременно верхним уровнем (это - тривиальный случай np), но я ищу общее решение, когда верхний уровень выше начальной точки. –  greenoldman 16.12.2011, 09:50
  • 2
    @macias: Извините, я не следую за Вами. Можно ли проиллюстрировать с примером? –  Faheem Mitha 16.12.2011, 10:05
  • 3
    я просто добавил ASCII "снимок экрана". Я надеюсь, что это поможет. В этом примере A является начальной точкой. –  greenoldman 16.12.2011, 10:19
  • 4
    @macias: Таким образом, Вы не хотите указывать путь к B (согласно Вашему примеру), а скорее A? Если так, почему? Это вызвано тем, что Вы хотите автоматизировать некоторый сценарий или по некоторой другой причине? Я также не уверен, что Вы подразумеваете под X=2. Это означает уровень 2? При попытке выбрать каталоги далее вниз в дереве, я не уверен, как Вы различаете B от G. –  Faheem Mitha 16.12.2011, 10:26
  • 5
    A является начальной точкой, потому что это - начальная точка - смотрят, я нахожусь на стороне клиента, не сервере. IOW - я НЕ владею сервером, и я не сделал эту структуру. Я должен иметь дело с тем, что я вижу. X символ от Обновления 2, "глубина", сколько уровней можно подняться. Вы отличаете B от G, потому что B является B, и G не является B, и Вы видите B, потому что это - часть URL для A. Я перефразировал вопрос в Обновлении 4. –  greenoldman 16.12.2011, 10:49

Необходимо добавить финал / к URL, еще Вы не получите то, что Вы хотите.

Если бы Вы хотели получить все содержание по www.myhostname.com/somedirectory затем, то синтаксис должен читать как:

wget -r -nH http://www.myhostname.com/somedirectory/

Попробуйте его без конца / и посмотрите то, что происходит. Затем попробуйте его/.

3
27.01.2020, 20:01
  • 1
    Это все еще возрастет в более высокие каталоги, если страницы, связанные там, будут относиться к такому –  EkriirkE 12.10.2015, 05:03
  • 2
    Большое спасибо за подсказку с запаздывающей наклонной чертой! Это помогло мне решить проблему с несоответствующими файлами, выбранными wget из соседних каталогов (одноуровневые элементы). –  AntonK 28.01.2018, 21:29

Я думаю, что правильно Ответ здесь - это вариант - NO-Parent :

   -np
   --no-parent
       Do not ever ascend to the parent directory when retrieving recursively.
       This is a useful option, since it guarantees that only the files below
       a certain hierarchy will be downloaded.
2
27.01.2020, 20:01

Теги

Похожие вопросы