[sftp] 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

이것은 “here doc” 구문을 사용하여 일련의 SFTP 입력 명령을 정의합니다. 대안으로 SFTP 명령을 텍스트 파일에 넣고 실행할 수 있습니다.sftp user@host -b batchFile.txt


답변

대답은 {file1,file2,file3}bash (원격 또는 로컬)에서만 작동합니다.

진짜 방법은 :

scp user@remote:'/path1/file1 /path2/file2 /path3/file3' /localPath


답변

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"

일부 쉘에서만 지원되는 “{}”구문을 사용하는 것과 비교할 때 이것은 보편적입니다


답변

가장 간단한 방법은

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