Scpを使用して、あるリモートサーバーから別のリモートサーバー上の新しいディレクトリ(つまり、名前を変更するだけ)にディレクトリをコピーします。
scp -prq server1:dir1 server2:dir2
これは、dir2がserver2に存在しない場合に正常に機能し、server1のdir1からのすべてを含むdir2という新しいディレクトリを作成します。
問題は、dir2がserver2に既に存在する場合に発生します(注:これを事前に知る方法も、前もってserver2のdir2を削除する方法もありません)。
基本的に欠けているものがあると確信していますが、うまくいかないようです。
どんな助けも大歓迎です!
よろしく、
ジャイルズ
わかりました。担当者は10人未満で、8時間待つことができません。
ここに私のために働くスクリプトがあります:
#!/bin/sh
echo "method 1"
scp -prq server1:dir1/* server2:dir2/ >/dev/null 2>&1
if [ "$?" -ne "0" ]; then
echo "failed ... trying method 2"
scp -prq server1:dir1 server2:dir2
fi
exit
単一のコマンドで、または可能であればこれを行う方法はまだわかりません。
@mindthemonkeyよろしくお願いします。時々、新鮮な視点を得るだけで道を示すことができます。
次の「ドット」構文を使用します。
scp -prq server1:dir1/. server2:dir2/
これにより、ディレクトリ自体ではなく、そのディレクトリの内容がコピーされます。そして、私はそれが*
グロビング。
通常、ディレクトリの作成を制御するには、末尾の/
を使用して完全なパスを示す必要がありますが、ディレクトリが存在しない場合は作成できません。
scp -prq server1:dir1/* server2:dir2/
これも隠されたものを見逃す可能性があります。 * glob展開によるファイル(一部の トリッキーシェル固有の作業なし なし)
ssh
とtar
を使用すると、異なる方法でアプローチできます。
ssh server1 "cd dir1 && tar -cf - ." | ssh server2 "( mkdir -p dir2; cd dir2 && tar -xf - )"
しかし、これはトラフィックがローカルマシンを経由することを意味します。