web-dev-qa-db-ja.com

1つのファイルを複数の場所にscpする

同じコマンドでファイルを複数の場所にscpできますか?

例えば:

scp file.txt [email protected]:, [email protected]:

または、すべてのホストが既に含まれているbashスクリプトを作成し、ファイルを引数として使用する方が現実的でしょうか。

29
Andrew

ファイルがあるとしましょう(destfile.txtuser@Host- values、各行に1つ。次に、このようにすることができます:

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

Parallel-scp (n)(t) のジョブのように見えます-これは、scpコマンドを一度に複数のシステムで実行できるようにする一連のコマンドを実装します。一連のマシンに並行してファイルをコピーすることができます。

7
AnonymousLurker
cat file.txt | tee >(ssh [email protected] "cat > file.txt") \
                   >(ssh [email protected] "cat > file.txt")

tar cz file1 file2 file3 | tee >(ssh [email protected] "tar xz") \
                               >( ... )
4
user1686

1行のシェルスクリプトを使用する別のオプションを次に示します。

cscp.sh 20337.patch < hosts.txt

ループ用とサーバーのホストリスト用の2つのファイルを使用します。 $1 CLIからの最初のパラメータを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
David Thomas

複数のサーバーで一貫した命名規則を使用している場合は、次のようなきちんとしたことができます。

for x in st1-abc-{11..20}.acme.com; do scp filez.tgz user@$x; done
0
deed02392

Xargsを使用することもできます。

hosts.txt:

[email protected]:
[email protected]:

次に、次のコマンドを実行します。

cat hosts.txt | xargs -I Host scp file.txt Host
0
Dgief

別の代替手段(およびワンライナー)は、代わりにpdshを使用して各ターゲットノードに接続し、そこからのgetをトリガーすることです。

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

もちろん、これにはもう1つの情報(ローカルホスト)とさまざまなユーザー権限が必要ですが、bashでループしたり、間接参照を使用してファイルを読み取ることは避けます。

0
Rick Moritz