複数のサーバーにSSHで接続し、ファイルを1つのサーバーにマージ

複数のサーバーにSSHで接続し、ファイルを1つのサーバーにマージ

次のコードを使用して、1つのサーバーでこれを行うことができます。

ssh server001 << EOF
cat /dir/file001.txt >> somefile
EOF

複数のサーバーを使用すると、私のスクリプトはサーバーにSSHで接続できますが、何らかの理由で私のfile00xファイルが見つからず、 cat: /dir/file00x.txt: No such file or directoryファイルが存在しても次のエラーが発生します.

これは私のコードです。

 for i in {10..15}; do
    ssh $i      //for simplicity, theres some text manipulation to get the actual name of the server
    cat /tmp/$i.txt
 done << newfile.txt

私もこの方法を試しましたが(明らかに正しい方法ではありません)、まだファイルを見つけることができません。

 for i in {10..15}; do
    ssh $i      
    cat /tmp/$i.txt >> newfile.txt
 done 

また、これを試しましたが、そのうちの1つも機能しませんでした。

 for i in {10..15}; do
    ssh $i  << EOF    
    cat /tmp/$i.txt >> newfile.txt
    EOF
 done 

答え1

私が質問を理解する限り、リモートシステムへのアクセスが必要であり、/tmp/$i.txtどこからアクセスするかは問題ではありません。newfile.txt

この場合、私たちはHEREファイルや巧妙さを心配する必要はありません。

ssh $i cat /tmp/$i.txt >> newfile.txt

catリモートシステムで実行されますが、ローカルに接続されます。

その後、次を繰り返すことができます。

for i in {10..15}
do
  ssh $i cat /tmp/$i.txt >> newfile.txt
done

逆に、リモートシステムでもリダイレクトが発生するようにするには、次のコマンドを引用できます。

for i in {10..15}
do
  ssh $i "cat /tmp/$i.txt >> newfile.txt"
done

これで、cat $i.txt >> newfile.txtリモートコンピュータでこれが起こります。

これは設定では重要ではありません。

関連情報