Я хотел бы скопировать файлы с / на удаленный сервер в разных каталогах. Например, я хочу запустить эти 4 команды одновременно.
scp remote:A/1.txt local:A/1.txt
scp remote:A/2.txt local:A/2.txt
scp remote:B/1.txt local:B/1.txt
scp remote:C/1.txt local:C/1.txt
Какой самый простой способ сделать это?
rsync
, может быть, это поможет вам в этом и во многих будущих случаях. Тогда, чтобы не вводить пароли ( не говоря уже несколько раз) , вы должны прочитать оssh
государственных / частных ключей, например digitalocean.com/community/tutorials/how-to-set-up-ssh-keys--2scp root@192.168.56.120:'/etc/openvpn/ca.crt /etc/openvpn/client/client0.crt /etc/openvpn/client/client0.key /etc/openvpn/client/ta.key' ./
.Ответы:
Скопируйте несколько файлов с удаленного на локальный:
Скопируйте несколько файлов с локального на удаленный:
Скопируйте несколько файлов с удаленного на удаленный:
Источник: http://www.hypexr.org/linux_scp_help.php
источник
~
или./
только.\{a,b,c\}
будет передаваться файлы в одном соединении / пакете (так как они будут расширены на удаленном хосте), в то время как использование{a,b,c}
откроет несколько подключений, и накладные расходы будут довольно заметно при передаче большого количества файловС локального на сервер:
scp file1.txt file2.sh username@ip.of.server.copyto:~/pathtoupload
С сервера на локальный:
scp -T username@ip.of.server.copyfrom:"file1.txt file2.txt" "~/yourpathtocopy"
источник
-T
опцию, чтобы подавить эту ошибку.Вы можете копировать целые каталоги, используя
-r
переключатель, поэтому, если вы можете изолировать свои файлы в собственный каталог, вы можете скопировать все сразу.так например
Или, если их всего несколько, вы можете использовать:
источник
Как упоминал Джири, вы можете использовать
scp -r user@host:/some/remote/path /some/local/path
для рекурсивного копирования файлов. Предполагается, что существует один каталог, содержащий все файлы, которые вы хотите перенести (и больше ничего).Однако SFTP предоставляет альтернативу, если вы хотите передавать файлы из нескольких разных каталогов, а места назначения не идентичны:
При этом используется синтаксис "here doc" для определения последовательности команд ввода SFTP. В качестве альтернативы вы можете поместить команды SFTP в текстовый файл и выполнить
sftp user@host -b batchFile.txt
источник
scp
слишком долго гуглял и анализировал руководство, пытаясь найти эту функцию, и, думаю, у scp ее нет./home/vagrant/Code/
вместо~/Code/
.- r
для каталоговОтветы с
{file1,file2,file3}
работает только с bash (удаленно или локально)Настоящий путь это:
источник
{…, …, …}
работами во многих снарядах не только в Баше. Однако это работает в любой оболочке, так что явно лучше.Поработав некоторое время с scp, я нашел самое надежное решение:
(Остерегайтесь одинарных и двойных кавычек)
От локального к удаленному:
Удаленный к местному:
Обратите внимание, что все, что после "HOST:" будет отправлено на удаленный компьютер и проанализировано там. Поэтому мы должны убедиться, что они не обрабатываются локальной оболочкой. Вот почему вводятся одинарные кавычки. Двойные кавычки используются для обработки пробелов в именах файлов.
Если все файлы находятся в одном каталоге, мы можем использовать *, чтобы сопоставить их все, например:
По сравнению с использованием синтаксиса "{}", который поддерживается только некоторыми оболочками, этот универсальный
источник
{}
Синтаксис делает его проще скопировать несколько файлов из одной директории, есть ли способ сделать это с помощьюscp -r
так , что"FILE1" "FILE2"
могут быть относительные пути и не абсолютные пути к файлам?Самый простой способ
Таким образом, список {..} может включать каталоги (здесь A, B и C - это каталоги; «1.txt» и «2.txt» - это имена файлов в этих каталогах).
Хотя он скопировал бы все эти четыре файла в один локальный каталог - не уверен, что это то, что вы хотели.
В приведенном выше случае вы получите удаленные файлы A / 1.txt, A / 2.txt, B / 3.txt и C / 4.txt, скопированные в один локальный каталог с именами файлов ./1.txt, ./2.txt, ./3.txt и ./4.txt
источник
sh
.local$ scp -r remote:{A/1.txt,A/2.txt,B/3.txt,C/4.txt,D,F} ./
Проблема : Копирование нескольких каталогов с удаленного сервера на локальный компьютер с помощью одной команды SCP и сохранение каждого каталога, как он есть на удаленном сервере.
Решение : SCP может сделать это легко. Это решает надоедливую проблему ввода пароля несколько раз при использовании SCP с несколькими папками. Следовательно, это также экономит много времени!
например
PS: мотивировано этим великолепным ответом: scp или sftp копируют несколько файлов одной командой
Судя по комментариям, это также хорошо работает в Git Bash на Windows
источник
Скопируйте несколько каталогов:
источник
Вы можете сделать это так:
Это загрузит все перечисленные имена файлов в любой локальный каталог, в котором вы находитесь.
Убедитесь, что не ставьте пробелы между именами файлов, используйте только запятую
,
.источник
/path/to/files/\\{file1.ext,file2.ext,file3.ext\\}
будто файлы имеют разные расширения. Примечание для людей PowerShell (теперь, когда MS присоединился к вечеринке), вы должны использовать`
вместо этого побег:/path/to/files/`{file1.ext,file2.ext,file3.ext`}
ПРИМЕЧАНИЕ: заранее прошу прощения за ответ только на часть вышеупомянутого вопроса. Однако я обнаружил, что эти команды полезны для моих текущих потребностей Unix.
Загрузка определенных файлов с локального компьютера на удаленный компьютер:
~/Desktop/dump_files$ scp file1.txt file2.txt lab1.cpp etc.ext your-user-id@remotemachine.edu:Folder1/DestinationFolderForFiles/
Загрузка всего каталога с локального компьютера на удаленный компьютер:
~$ scp -r Desktop/dump_files your-user-id@remotemachine.edu:Folder1/DestinationFolderForFiles/
Загрузка всего каталога с удаленного компьютера на локальный:
~/Desktop$ scp -r your-user-id@remote.host.edu:Public/web/ Desktop/
источник
В моем случае я ограничен только использованием команды sftp.
Итак, мне пришлось использовать пакетный файл с sftp. Я создал такой скрипт, как следующий. Предполагается, что вы работаете в каталоге / tmp и хотите поместить файлы в destdir_on_remote_system в удаленной системе. Это также работает только с неинтерактивным логином. Вам необходимо настроить открытый / закрытый ключи, чтобы вы могли войти без ввода пароля. Изменить по мере необходимости.
источник
Ваша команда работает отлично, но я также хочу изменить имя файла при отправке с локального на удаленный. Я написал команду: - sshpass -p пароль scp /path/to/file.txt root @ hostname: /path/newfile.txt
Но выдает ошибку, что /path/newfile.txt: не найден такой файл или каталог, плз, помогите мне в этой ситуации
источник
hostname:/path/
действительно существует и доступен.scp использует ssh для передачи данных с той же аутентификацией и обеспечивает ту же безопасность, что и ssh.
Лучшей практикой здесь является реализация «SSH KEYS И PUBLIC KEY AUTHENTICATION». Благодаря этому вы можете писать свои сценарии, не беспокоясь об аутентификации. Просто как тот.
Посмотрите, что такое SSH-KEYGEN
источник
В конкретном случае, когда все файлы имеют одинаковое расширение, но с разным суффиксом (скажем, номером файла журнала), вы используете следующее:
Это скопирует все файлы с именем some_log_file из заданной папки на удаленном компьютере, то есть - some_log_file.1, some_log_file.2, some_log_file.3 ....
источник
источник
-r
опциейscp
. И вы можете сохранить другие атрибуты (например, отметку времени) с-p
опцией.