Я должен перенести много файлов с одного компьютера на другой (оба Linux). Я хотел бы использовать scp
для этого, но scp
позволяет передавать только один файл за раз.
Как я могу это сделать?
у меня есть
- Нет возможности использовать rsync или любой другой протокол
- Нет возможности использовать сертификаты без пароля (но есть сертификат с парольной фразой)
- Список файлов для передачи и список с целевым путем файлов на другом сервере
- Файлы распределены по многим каталогам, и не все файлы в каталогах, которые я хочу скопировать
Если возможно, я бы хотел прозрачно распаковать и распаковать, чтобы сэкономить пропускную способность!
Это возможно?
-C'' on a line by itself will cause the current directory to be changed to the directory specified on the following line. Names are terminated by newlines unless --null is specified. Note that --null also disables the special handling of lines containing
-C ''."Я почти уверен, что это неправда, по крайней мере, не для
scp
команды, предоставляемой OpenSSH, включенной в большинство дистрибутивов Linux.Я использую
scp file1 file2 ... fileN user@host:/destination/directory/
довольно часто.Для прозрачного сжатия встроенный протокол SSH
scp
может использовать его, если вы укажете-C
опцию в командной строке. Для множества похожих небольших файлов вы найдете вариант tar + gz, предложенный akira, улучшающий сжатие, поскольку он может использовать сходство между такими файлами, гдеscp
каждый файл сжимается как отдельный объект. Обычно я предпочитаю использовать scp, так как проще возобновить частичную передачу (или, хотя я знаю, что в этой ситуации у спрашивающего нет возможности), такrsync
как это еще проще возобновить и делит весь параметр tar + gz целиком Преимущество сжатия потокаисточник
Не
scp -r yourdir otherhost:/otherdir
работает?Попробуйте это тогда:
z
-flag деготь делает сжатие. Или вы можете использовать -C для SSH:источник
-C
?На RHEL5, это единственный возможный способ, которым я знаю, для безопасного копирования списка файлов, содержащих специальные символы (например, пробел). Сделайте скрипт оболочки и включите в него следующее:
источник
Это может быть сделано без особых проблем.
Я просто создаю список файлов с именем хоста рядом с каждым файлом, и scp, кажется, хорошо его разбирает. то есть.
Scp, кажется, работает нормально с этим синтаксисом. Когда я попытался без имени хоста рядом с каждым файлом, после первого файла произошел сбой. Кажется, я вспомнил другой синтаксис, который я использовал для этого раньше, и опубликую его, как только я его найду.
источник
~/
основном, можно не учитывать - SCP работает относительно домашнего каталога. .. Если у вас есть список из другого места в$list
:scp $(echo "$list"|sed "s/^/$srchost:/") local_destination
(Это будет сломано для имен файлов с пробелами, хотя)Я бы порекомендовал частям использовать такую команду, чтобы создать архив из списка файлов.
tar -cvf allfiles.tar -L mylist.txt
Затем используйте scp для загрузки архива.
scp user @ remotehost: ~ / allfiles.tar
/programming/8033857/tar-archiving-that-takes-input-from-a-list-of-files
источник