단일 파일을 여러 위치로 scp


28

scp동일한 명령으로 파일을 여러 위치에 저장할 수 있습니까 ?

예를 들면 다음과 같습니다.

scp file.txt user@ip-1.com:, user@ip2.com:

아니면 이미 모든 호스트가 들어있는 bash 스크립트를 작성하는 것이 더 실용적이며 인수로 파일을 가져갈 것입니까?

답변:


24

각 줄에 하나씩-값을 destfile.txt가진 파일 ( ) 이 있다고 가정 user@host합니다. 그럼 당신은 이렇게 할 수 있습니다 :

while IFS= read -r dest; do
  scp ourfile.txt "$dest:remote/path/"
done <destfile.txt

작동합니다! 그래도 입력하기에는 소수입니다. 아마도 그것을 단순화하는 방법이있을 것입니다.
Andrew

2
for@Andrew , -loop를로 변경하면 while read dest; do표준 입력에서 읽습니다. 스크립트에 넣고 피드를 destfile.txt넣습니다 (예 :) ./thescript.sh <destfile.txt.
Kusalananda

나는 전자를하고 있지만 rsync를 사용하고 일부 노드는 업데이트되지 않습니다. 왜 그런지 알아?
Soubriquet

7

parallel-scp (n) (t)에 대한 작업처럼 보입니다. 이는 여러 시스템에서 scp 명령을 한 번에 실행할 수있는 일련의 명령을 구현합니다. 머신 세트와 병렬로 파일을 복사 할 수 있습니다.


4
cat file.txt | tee >(ssh user@ip1.com "cat > file.txt") \
                   >(ssh user@ip2.com "cat > file.txt")

tar cz file1 file2 file3 | tee >(ssh user@ip1.com "tar xz") \
                               >( ... )

0

또 다른 대안 (및 하나의 라이너)은 대신 ​​pdsh를 사용하여 각 대상 노드에 연결하고 거기에서 가져 오는 것을 트리거하는 것입니다.

pdsh -w^destfile.txt scp hostname:/path/to/file /path/to/destfile

물론 여기에는 하나의 추가 정보 (로컬 호스트)와 다른 사용자 권한이 필요하지만 bash에서 루핑하고 파일을 읽는 데 간접적 인 사용을 피하십시오.


0

한 줄 쉘 스크립트가있는 다른 옵션이 있습니다.

cscp.sh 20337.patch < hosts.txt

루프 용 파일 하나와 서버 호스트 목록 용 파일 하나를 사용합니다. $1CLI에서 파일 이름으로 SCP의 첫 번째 매개 변수를 SCP에 읽습니다.

cscp.sh

#!/bin/bash
while read host; do
  scp $1 ${host}:
done

hosts.txt

project-prod-web1
project-prod-web2
project-prod-web3

용법

파일을 여러 호스트에 복사하십시오.

cscp.sh file < hosts

0

여러 서버에 대해 일관된 이름 지정 규칙이있는 경우 다음과 같이 깔끔한 작업을 수행 할 수 있습니다.

for x in st1-abc-{11..20}.acme.com; do scp filez.tgz user@$x; done
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.