При использовании Bash 4 + можно сделать:
#!/bin/bash
shopt -s globstar
for fname in **/*; do
if [ -f "$fname" ]; then
mv ...
fi
done
От хакера Bash Wiki:
Существует новая опция оболочки globstar. При включении Bash выполнит рекурсивный globbing на ** – это означает, что он соответствует всем каталогам и файлам от текущей позиции в файловой системе, скорее это только текущий уровень.
Я не попробовал его, но использующий-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.
Возможно, я пропускаю что-то, но если, именно это Вы хотите затем
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
, который довольно читаем и имеет примеры.
np
), но я ищу общее решение, когда верхний уровень выше начальной точки.
– greenoldman
16.12.2011, 09:50
B
(согласно Вашему примеру), а скорее A
? Если так, почему? Это вызвано тем, что Вы хотите автоматизировать некоторый сценарий или по некоторой другой причине? Я также не уверен, что Вы подразумеваете под X=2. Это означает уровень 2? При попытке выбрать каталоги далее вниз в дереве, я не уверен, как Вы различаете B
от G
.
– Faheem Mitha
16.12.2011, 10:26
Необходимо добавить финал / к URL, еще Вы не получите то, что Вы хотите.
Если бы Вы хотели получить все содержание по www.myhostname.com/somedirectory затем, то синтаксис должен читать как:
wget -r -nH http://www.myhostname.com/somedirectory/
Попробуйте его без конца / и посмотрите то, что происходит. Затем попробуйте его/.
Я думаю, что правильно Ответ здесь - это вариант - 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.