5

У меня есть список (несколько тысяч) абсолютных путей к файлам на удаленном сервере, которые мне нужно загрузить на мой компьютер.

Мне также нужны файлы, чтобы сохранить структуру каталогов для этих файлов.

Пример:

/* UNIX Server File-System  */
/home/username/
    stuff/
    more-stuff/
    data/
    file1.txt

/* Local Windows File-System After Transfer  */
C:\Users\username\Documents\home\username\
    stuff\
    more-stuff\
    data\
    file1.txt

В идеале, я бы использовал какой-то тип FTP для передачи этих файлов на мой компьютер. Тем не менее, я не знаю программу или команду CLI, которая поддерживает получение списка файлов. Мне нужно получить конкретные файлы из определенных каталогов, я не могу просто скачать целые каталоги.

Мой вопрос: Как я могу использовать список абсолютных путей для автоматической загрузки файлов на мой локальный хост? (при сохранении структуры каталогов)

Кроме того, у меня есть эти файлы в массиве PHP. Поэтому я могу экспортировать список в формате JSON, CSV, XML и т.д.

4 ответа4

5

wget имеет ту функциональность, которую вы ищете. Из справочной страницы:

-i file
       --input-file=file
           Read URLs from a local or external file.  If - is specified as file, URLs are read from the standard input.  (Use ./- to read from a file literally named -.)

Другими словами: wget -i filelist.txt .

список файлов тоже не обязательно должен быть txt, так как wget поддерживает html через ключ --force-html . Если у вас есть только список каталогов / файлов, вы можете установить базовый URL-адрес в командной строке с помощью --base .

3

Если вы не возражаете, вы можете использовать rsync с чем-то вроде

rsync -av --files-from=/path/yourlist.txt / remote:/backup

в которой

  • /path/yourlist.txt вы можете поместить свой список файлов с полным путем
  • / Путь для добавления к имени файла в вашем списке (если они являются полным путем /)
  • remote:/backup имени удаленного хоста и его относительного пути

Вы можете узнать больше о поиске --files-from от man rsync [ 1 ]

--files-с = ФАЙЛ

Using this option allows you to specify the exact list of files to transfer (as
read from the specified FILE or - for standard input). It also tweaks the 
default  behavior of rsync to make transferring just the  specified files and 
directories  easier:
  • Подразумевается опция --relative (-R), которая сохраняет информацию о пути, которая указана для каждого элемента в файле (используйте --no -lative или --no-R, если вы хотите отключить это).
  • Подразумевается опция --dirs (-d), которая создает каталоги, указанные в списке в месте назначения, а не пропускает их с шумом (используйте --no-dirs или --no-d, если вы хотите отключить это).
  • Поведение параметра - archive (-a) не подразумевает --recursive (-r), поэтому укажите его явно, если хотите.
  • Эти побочные эффекты изменяют состояние по умолчанию rsync, поэтому положение параметра --files-from в командной строке не влияет на то, как анализируются другие параметры (например, -a работает одинаково до или после --files- из, как делает --no-R и все другие варианты).

... на странице руководства есть еще ...

2

Тем не менее, я не знаю программу или команду CLI, которая поддерживает получение списка файлов.

Я не уверен, почему это должно быть камнем преткновения. Вы можете запустить ftp со скриптом в качестве источника,

cd Target_Directory
ftp -v -s:script.ftp ftp.myhost.net 1> /absolute/path/to/my/logfile 2>&1

где Target_Directory - это место, куда вы хотите поместить файлы, которые должны быть загружены, а script.ftp - это файл сценария, подобный следующему:

USER MyUserId
MyPassword
cd SOURCE_DIR
binary
prompt n
mget the_first_file_I_need
mget the_second_file_I_need
bye

Это хорошо для одного сайта. Как насчет многих сайтов? Вы можете создать файл сценария, назовите его script_main, со следующими строками:

cd Target_Directory_1
ftp -v -s:script_1.ftp ftp.myhost_1.net 1>> /absolute/path/to/my/logfile 2>>&1
cd Target_Directory_2
ftp -v -s:script_2.ftp ftp.myhost_2.net 1>> /absolute/path/to/my/logfile 2>>&1
....

и так далее. Вы можете подготовить файлы scrip_N.ftp информацию в правильно разделенных файлах.

2

Возможно, aria2 .

Из документации :

-d, --dir =

Каталог для хранения загруженного файла.

-i, --input-file =

Загружает URI, указанные в FILE. Вы можете указать несколько источников для одного объекта, поместив несколько URI в одну строку, разделенных символом TAB. Кроме того, параметры могут быть указаны после каждой строки URI. Строки опций должны начинаться с одного или нескольких символов пробела (SPACE или TAB) и содержать только одну опцию в каждой строке. Входные файлы могут использовать сжатие GZIP.

Для этого потребуется отдельный входной файл для каждого каталога.

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