scp 또는 sftp는 단일 명령으로 여러 파일을 복사합니다
다른 디렉토리의 원격 서버와 파일을 복사하고 싶습니다. 예를 들어,이 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 your_username@remote.edu:/some/remote/directory/\{a,b,c\} ./
로컬에서 원격으로 여러 파일을 복사하십시오.
$ scp foo.txt bar.txt your_username@remotehost.edu:~
$ scp {foo,bar}.txt your_username@remotehost.edu:~
$ scp *.txt your_username@remotehost.edu:~
원격에서 원격으로 여러 파일을 복사하십시오.
$ scp your_username@remote1.edu:/some/remote/directory/foobar.txt \
your_username@remote2.edu:/some/remote/directory/
출처 : http://www.hypexr.org/linux_scp_help.php
로컬에서 서버로 :
scp file1.txt file2.sh username@ip.of.server.copyto:~/pathtoupload
서버에서 로컬로 :
scp -T username@ip.of.server.copyfrom:"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 root@192.168.1.100:/var/log ~/backup-logs
또는 그중 몇 개만있는 경우 다음을 사용할 수 있습니다.
scp 1.txt 2.txt 3.log user@remote-server:upload-path
Jiri가 언급했듯이 scp -r user@host:/some/remote/path /some/local/path
파일을 재귀 적으로 복사 하는 데 사용할 수 있습니다 . 전송하려는 모든 파일을 포함하는 단일 디렉토리가 있다고 가정합니다.
그러나 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 user@host -b batchFile.txt
대답은 {file1,file2,file3}
bash (원격 또는 로컬)에서만 작동합니다.
실제 방법은 다음과 같습니다.
scp user@remote:'/path1/file1 /path2/file2 /path3/file3' /localPath
가장 간단한 방법은
local$ scp remote:{A/1,A/2,B/3,C/4}.txt ./
따라서 {..} 목록은 디렉토리를 포함 할 수 있습니다 (여기서 A, B 및 C는 디렉토리이며 "1.txt"및 "2.txt"는 해당 디렉토리의 파일 이름입니다).
이 네 파일을 모두 하나의 로컬 디렉토리에 복사하지만 원하는 것이 확실하지 않은지 확인하십시오.
위의 경우 파일 이름이 ./1.txt 인 단일 로컬 디렉토리에 복사 된 원격 파일 A / 1.txt, A / 2.txt, B / 3.txt 및 C / 4.txt가 종료됩니다. ./2.txt, ./3.txt 및 ./4.txt
여러 디렉토리를 복사하십시오.
scp -r dir1 dir2 dir3 admin@127.0.0.1:~/
문제 : 단일 SCP 명령을 사용하여 원격 서버에서 로컬 시스템으로 여러 디렉토리를 복사하고 각 디렉토리를 원격 서버에 그대로 유지합니다.
해결책 : SCP는 이것을 쉽게 할 수 있습니다. 이것은 여러 폴더로 SCP를 사용할 때 암호를 여러 번 입력하는 성가신 문제를 해결합니다. 결과적으로 시간도 많이 절약됩니다!
예 :
# 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 username@contact.server.de:/work/datasets/images/test/\{t1,t2,t3\} .
추신 :이 위대한 대답에 동기 부여 : scp 또는 sftp는 단일 명령으로 여러 파일을 복사합니다.
주석을 기반으로, 이것은 Windows의 Git Bash 에서도 잘 작동합니다.
scp를 잠시 사용한 후 가장 강력한 솔루션을 찾았습니다.
(작은 따옴표와 큰 따옴표를주의하십시오)
로컬에서 원격으로 :
scp -r "FILE1" "FILE2" HOST:'"DIR"'
원격에서 로컬로 :
scp -r HOST:'"FILE1" "FILE2"' "DIR"
"HOST :"다음에 나오는 것은 원격으로 전송되어 파싱됩니다. 따라서 로컬 셸에서 처리하지 않아야합니다. 이것이 작은 따옴표가있는 이유입니다. 큰 따옴표는 파일 이름의 공백을 처리하는 데 사용됩니다.
파일이 모두 같은 디렉토리에 있으면 *를 사용하여 다음과 같이 모두 일치시킬 수 있습니다.
scp -r "DIR_IN"/*.txt HOST:'"DIR"'
scp -r HOST:'"DIR_IN"/*.txt' "DIR"
일부 쉘에서만 지원되는 "{}"구문을 사용하는 것과 비교할 때 이것은 보편적입니다
참고 : 위의 질문 중 일부에 대해서만 답변 해 주셔서 감사합니다. 그러나이 명령이 현재 유닉스 요구에 유용하다는 것을 알았습니다.
로컬 컴퓨터에서 원격 컴퓨터로 특정 파일 업로드 :
~/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에 파일을 저장하려고한다고 가정합니다. 이것은 비 대화식 로그인에서만 작동합니다. 비밀번호를 입력하지 않고 로그인 할 수 있도록 공개 / 개인 키를 설정해야합니다. 필요에 따라 변경하십시오.
#!/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
귀하의 명령은 완벽하게 작동하지만 원격으로 로컬을 보내는 동안 파일 이름을 변경하고 싶습니다. 나는 명령을 썼다 :-sshpass -p password scp /path/to/file.txt root @ hostname : /path/newfile.txt
그러나 /path/newfile.txt : 오류가 발생합니다.이 파일에서 plz를 찾지 못했습니다.
scp는 동일한 인증으로 데이터 전송에 ssh를 사용하며 ssh와 동일한 보안을 제공합니다.
여기서 가장 좋은 방법은 "SSH KEYS 및 PUBLIC KEY AUTHENTICATION"을 구현하는 것입니다. 이를 통해 인증에 대한 걱정없이 스크립트를 작성할 수 있습니다. 그렇게 간단합니다.
모든 파일의 확장자는 동일하지만 접미사 (예 : 로그 파일 수)가 다른 특정 경우 다음을 사용합니다.
scp user_name@ip.of.remote.machine:/some/log/folder/some_log_file.* ./
이것은 원격의 주어진 폴더에서 some_log_file이라는 모든 파일을 복사합니다. 예 : some_log_file.1, some_log_file.2, some_log_file.3 ....
scp remote:"[A-C]/[12].txt" local:
참고 URL : https://stackoverflow.com/questions/16886179/scp-or-sftp-copy-multiple-files-with-single-command
'Programing' 카테고리의 다른 글
파이썬에서 여러 공백을 단일 공백으로 대체 (0) | 2020.03.28 |
---|---|
fs.readFile에서 데이터 가져 오기 (0) | 2020.03.28 |
VS 2013이 왜 매우 느린가요? (0) | 2020.03.27 |
선택적 경로 매개 변수가있는 반응 라우터 (0) | 2020.03.27 |
Bash에 TRY CATCH 명령이 있습니까? (0) | 2020.03.27 |