Выборочно копировать из коллекции удаленных каталогов

У меня есть удаленная машина с большим количеством нумерованных каталогов, например:

dir1 dir2 dir3 ... dir40 

каждый из которых содержит несколько пронумерованных файлов:

 file1 file2 file3 ... file2530 

Я хочу скопировать только выбранный диапазон файлов в каждом каталоге. Поскольку имена файлов одинаковы в каждом каталоге, я хочу повторно создать иерархию каталогов на моей локальной машине. Но так как я не хочу каждый файл, я не могу просто использовать scp -r для копирования всех файлов в каталоге.

Я не могу настроить автоматическое соединение с ssh-ключами на удаленном компьютере, поэтому я бы предпочел метод, который не требует повторных вызовов для команды удаленного копирования. Файлы также большие, поэтому я не хочу просто копировать все это и удалять те, которые мне не нужны, с расширением rm и brace.

Как я могу скопировать набор файлов с удаленной машины вместе с родительскими каталогами этих файлов, сохраняя структуру каталогов и не копируя каждый файл в этих каталогах?

One Solution collect form web for “Выборочно копировать из коллекции удаленных каталогов”

Вы можете использовать rsync , который будет делать только один ssh на удаленном компьютере и предоставить ему полный список файлов или список шаблонов glob файлов для копирования или копирования. Например,

 rsync -navR --exclude='*-[4-9]?.out' --exclude='*-3[3-9].out' --exclude='*-???*.out' myremote:'dir*' mylocaldir 

Это исключало бы имена файлов, таких как file-40.out с двумя символами от 40 до 99, а также с file-33.out до 39, а также file-100.out или больше. Выполните команду с параметром -n как показано на рисунке, чтобы собрать список имен, которые будут переданы, и если это нормально, удалите опцию для фактической копии.

Обратите внимание, что rsync не поддерживает фигурные скобки {} в своих шаблонах glob. Альтернативные способы указания файлов для копирования зависят от того, насколько экзотичен ваш шаблон исключения, но надежным методом является использование -n и отсутствие шаблонов исключений для получения полного списка имен, а затем отредактируйте этот список и предоставите его как --files-from списка файлов. Вам также необходимо удалить dir* из удаленного адресата:

 rsync -av --files-from=list myremote: mylocaldir 
Interesting Posts
Linux и Unix - лучшая ОС в мире.