wget: Как сохранить структуру папок на определенном уровне? - PullRequest
0 голосов
/ 20 июня 2020

Мне нужно загрузить все содержимое из корзин на publi c хранилище Google. Насколько мне известно, рекурсивная загрузка не работает с wget (я знаю, что это работает с API и gsutil, но мне нужно решение wget). Однако у меня есть список с URL-адресами содержимого папки. Цель состоит в том, чтобы сохранить структуру папок из определенной точки входа, folder1, следующим образом:

http://storage.googleapis.com/publicdataset/bla/bla/.../folder1/subfolder1/file1.txt
-folder1
--subfolder1
---file1
---file2
---subfolder2
----file3

Один из способов - использовать параметр -r. Хотя рекурсивной загрузки не произойдет, поскольку мы загружаем из корзин, а не из папок, структура папок наследуется от URL-адреса. Это может быть расширено с помощью -nH (удаляет имя хоста) и --cut-dirs = n (удаляет все уровни каталогов выше n). Однако количество вырезанных каталогов меняется в зависимости от того, на скольких уровнях ниже folder1 расположен файл. Поэтому мне понадобится инверсия кат-каталогов, подсчитывающая уровни из URL-адреса хоста.

Загрузка всех файлов в списке должна выполняться параллельно с использованием xargs ($ LINKS - это путь к файлу, содержащему все ссылки для загрузки, по одному файлу в строке):

echo $LINKS | xargs -n 1 -P 8 wget -r 

Файл $ LINKS выглядит так:

http://storage.googleapis.com/publicdataset/bla/bla/.../folder1/subfolder1/file1.txt
http://storage.googleapis.com/publicdataset/bla/bla/.../folder1/subfolder1/file2.txt
http://storage.googleapis.com/publicdataset/bla/bla/.../folder1/subfolder1/subfolder2/file3.txt

То, о чем я думал до сих пор, - это динамическое создание местоположения загрузки для каждой ссылки. Я не знаю, возможно ли это сделать в приведенной выше строке, так как вывод echo нужно будет направить в wget в исходном формате и снова после изменения awk / sed.

...