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

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

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 
  • Скопируйте файл из Windows в Linux, когда исполняется сценарий оболочки
  • Как scp с регулярными выражениями
  • Как скопировать с помощью SCP между двумя серверами с помощью ключа auth?
  • Как скопировать большие файлы на другой Linux Server независимо от TTY
  • Невозможно использовать scp для Solaris
  • Объединить zipfile: с scp: чтобы открыть удаленный zip с vim
  • Разница в разрешении хоста ssh / scp и достижении сети
  • Как я могу отправить один файл на несколько удаленных сайтов одновременно?
  • Команда SCP продолжает запрашивать пароль
  • scp и сжимать одновременно, без промежуточного сохранения
  • Исключить символы для SCP-файла
  • Linux и Unix - лучшая ОС в мире.