Я'хочу копировать файлы с/на удаленный сервер в разные директории. Например, я хочу запустить эти 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
Какой самый простой способ сделать это?
Скопировать несколько файлов с удаленного на локальный:
$ scp [email protected]:/some/remote/directory/\{a,b,c\} ./
Скопировать несколько файлов с локального на удаленный:
$ scp foo.txt bar.txt [email protected]:~
$ scp {foo,bar}.txt [email protected]:~
$ scp *.txt [email protected]:~
Скопировать несколько файлов из удаленного удаленного:
$ scp [email protected]:/some/remote/directory/foobar.txt \
[email protected]:/some/remote/directory/
Источник: http://www.hypexr.org/linux_scp_help.php
От локального к серверу:
scp file1.txt file2.sh [email protected]:~/pathtoupload
.
С сервера на локальный:
scp -T [email protected]:"file1.txt file2.txt" "~/yourpathtocopy"
.
Вы можете копировать целые каталоги с помощью переключателя -r
, поэтому если вы можете выделить файлы в отдельный каталог, вы можете скопировать все сразу.
scp -r ./dir-with-files user@remote-server:upload-path
scp -r user@remote-server:path-to-dir-with-files download-path
например
scp -r [email protected]:/var/log ~/backup-logs
Или, если их всего несколько, вы можете использовать:
scp 1.txt 2.txt 3.log user@remote-server:upload-path
Как отметил Иржи, вы можете использовать `УПП -Р user@host:/some/remote/path /некоторые/местного/путь для копирования файлов рекурсивно. Это предполагает, что там's в единый каталог, содержащий все файлы, которые вы хотите перенести (и ничто другое).
Однако, по SFTP является альтернативой, если вы хотите перенести файлы из разных каталогов, и направления не идентичны:
sftp user@host << EOF
get /some/remote/path1/file1 /some/local/path1/file1
get /some/remote/path2/file2 /some/local/path2/file2
get /some/remote/path3/file3 /some/local/path3/file3
EOF
При этом используется на"док" и синтаксис, чтобы определить последовательность вводимых команд по протоколу SFTP. В качестве альтернативы, вы могли бы поставить команды по SFTP в текстовый файл и выполнить по SFTP пользователь@хост -б batchFile.txt`
Самый простой способ-это
local$ scp remote:{A/1,A/2,B/3,C/4}.txt ./
Так {.. } список может включать в себя каталоги (А,B и C здесь представлены каталоги; на "1.тхт" и "2.тхт" и имена файлов в этих каталогах).
Хотя бы скопировать все эти четыре файла в локальную папку - не уверен, если это's то, что вы хотели.
В приведенном выше случае вы будете в конечном итоге удаленные файлы A/1.txt, A/2.txt, B/3.txt и C/4.txt копируются в один локальный каталог с именами файлов ./1.txt, ./2.txt, ./3.txt и ./4.txt
После игры с УПП на некоторое время я нашел самое надежное решение:
(Остерегайтесь одинарные и двойные кавычки)
Локального на удаленный:
scp -r "FILE1" "FILE2" HOST:'"DIR"'
Удаленного на локальный:
scp -r HOST:'"FILE1" "FILE2"' "DIR"
Обратите внимание, что все, что после "у хозяина:" и будет отправлен на пульт и разбирается там. Поэтому мы должны убедиться, что они не обрабатываются местной оболочки. Вот почему приходят одиночные кавычки. Двойные кавычки используются для обработки пробелов в именах файлов.
Если файлы находятся в одном каталоге, мы можем использовать *, чтобы соответствовать их все, такие как
scp -r "DIR_IN"/*.txt HOST:'"DIR"'
scp -r HOST:'"DIR_IN"/*.txt' "DIR"
По сравнению с использованием в "{}" и синтаксис, который поддерживается только несколько снарядов, это универсальный
Проблема: копирование нескольких каталогов с удаленного сервера на локальную машину, используя единый УПП команды и удержания в каждом каталоге, как это на удаленном сервере.
Решение: УПП можно сделать это легко. Это позволяет решить досадную проблему ввода пароля несколько раз при использовании УПП с несколькими папками. Следовательно, это также экономит много времени!
например
# copies folders t1, t2, t3 from `test` to your local working directory
# note that there shouldn't be any space in between the folder names;
# we also escape the braces.
# please note the dot at the end of the SCP command
~$ cd ~/working/directory
~$ scp -r [email protected]:/work/datasets/images/test/\{t1,t2,t3\} .
ЗЫ: мотивирован на это отличный ответ: SCP или SFTP скопировать несколько файлов с одной команды
На основе комментариев, это также хорошо работает в Баш Git в Windows
Примечание: извиняюсь заранее за ответы только на часть указанного выше вопрос. Однако, я нашел эти команды, чтобы быть полезным для моих текущих потребностей в Unix.
Загрузки определенных файлов с локальной машины на удаленную машину:
~/Рабочий стол/dump_files$ УПП file1.txt file2.txt lab1.cpp и т. д. [email protected]:Folder1/DestinationFolderForFiles ВН/
Загрузите всю директорию с локальной машины на удаленную машину:
~$ пкпп -Р стола/dump_files [email protected]:Folder1/DestinationFolderForFiles/
Загрузить всю директорию с удаленной машины на локальную машину:
~/Рабочий стол$ пкпп -Р [email protected]:Public/web/ рабочий стол/
ваша команда работает замечательно, но я также хочу, чтобы изменить имя файла при отправке локального на удаленный. Я написал команду:- sshpass -P пароль УПП /path/to/file.txt root@hostname:/path/newfile.txt
Но он дает ошибку, что /path/newfile.txt: нет такого файла или каталога плз, помогите мне в этой ситуации
В моем случае, я только с помощью команды SFTP. Итак, мне пришлось использовать пакетник с SFTP. Я создал скрипт, таких как следующие. Это предполагает, что вы работаете в каталог /tmp, и вы хотите поместить файлы в destdir_on_remote_system на удаленной системе. Это также работает только с логином неинтерактивным. Вам нужно настроить публичных/частных ключей, так что вы можете войти без ввода пароля. Менять по мере необходимости.
#!/bin/bash
cd /tmp
# start script with list of files to transfer
ls -1 fileset1* > batchfile1
ls -1 fileset2* >> batchfile1
sed -i -e 's/^/put /' batchfile1
echo "cd destdir_on_remote_system" > batchfile
cat batchfile1 >> batchfile
rm batchfile1
sftp -b batchfile user@host
В данном случае, когда все файлы имеют одинаковые расширения, но с другой суффикс (скажем, количество лог-файл) вы можете использовать следующие:
scp [email protected]:/some/log/folder/some_log_file.* ./
Это позволит скопировать все файлы с именем some_log_file из данной папки в удаленном, т. е. - some_log_file.1 , some_log_file.2, some_log_file.3 ....
SCP использует SSH для передачи данных с той же аутентификации и обеспечивает такую же безопасность как СШ.
Лучшая практика здесь заключается в реализации "и SSH ключей и аутентификации по публичному ключу и". При этом, вы можете писать свои скрипты без worring о проверки подлинности. Просто.
Вы можете сделать это так:
scp hostname@serverNameOrServerIp:/path/to/files/\\{file1,file2,file3\\}.fileExtension ./
Это будет скачать все перечисленные имена, чтобы любой локальный каталог вы'вновь на.
Убедитесь, что не ставить пробелы между именем используют только запятая ,
.