scpが常にディレクトリを上書きまたは作成するようにします


26

scpを使用して、あるリモートサーバーから別のリモートサーバー上の新しいディレクトリ(名前を変更するだけ)にディレクトリをコピーします。

scp -prq server1:dir1 server2:dir2

これは、dir2がserver2に存在しない場合に正常に機能し、server1のdir1からのすべてを含むdir2という新しいディレクトリを作成します。

問題は、dir2がserver2にすでに存在する場合に発生します(注:事前にこれを知る方法やserver2のdir2を削除する方法はありません)-dir2でdir1と呼ばれるdir1のコピーを取得します

私は欠けている基本的なものがあると確信していますが、うまくいかないようです。

助けていただければ幸いです!

よろしく、

ジャイルズ

さて、私は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ではなくscpにアクセスできますか?
マット

それは正しいです
ジャイルズ

唯一の問題は、障害が発生したときに2番目のコピーを試行することです。これは、必ずしもdir2が存在しないわけではありません。たぶん、事実上何もしないテストを考え出すことができるなら(たとえば、空のディレクトリをコピーする)。その後、出力のいずれかの実行SCP1またはSCP2に基づいて
マット・

良い点は、私はそれを念頭に置いて前進し、何か思いついたら再投稿します。
ジャイルズ

sftpできますか?次に、の出力を確認しますcd dir2
マット

回答:


34

この「ドット」構文を使用します。

scp -prq server1:dir1/. server2:dir2/

これにより、ディレクトリ自体ではなく、そのディレクトリの内容がコピーされます。そして、私はそれが*グロビングよりもポータブルであると信じています。


2
-p⇒「元のファイルの変更時間、アクセス時間、モードを保持します。」-r⇒「ディレクトリ全体を再帰的にコピーします。」-q⇒「プログレスメーターを無効にします。」出典:computerhope.com/unix/scp.htm
kr85

1
これは私にエラーを与える:scp: error: unexpected filename: .
アンドリュー・コスター

1

通常、ディレクトリの作成を制御/するには、完全なパスを示すために末尾を使用する必要がありますが、ディレクトリが存在しない場合は作成に失敗すると思います。

scp -prq server1:dir1/* server2:dir2/

また、これは隠されたものを見逃す可能性があります。* glob展開によるファイル(シェル特有の特殊な作業なし

あなたはと異なり、それに近づくことができるsshtar

ssh server1 "cd dir1 && tar -cf - ." | ssh server2 "( mkdir -p dir2; cd dir2 && tar -xf - )"

しかし、これはトラフィックがローカルマシンを経由することを意味します。


scp -prq server1:dir1 / * server2:dir2 /
ジャイルズ

@Gilesはそれが機能していると言っていますか?
マット

1
奇妙なことに、私はそれを編集しましたが、失われました-いいえ、それは機能しません、dirが存在しない場合、scpはエラーを出します。また、この特定のケースではsshを使用できません(ユーザー権利の問題)。ただし、これはアイデアを与えてくれます。スクリプトでこれを行っているので、上記を試して、エラーをキャプチャし、エラーが発生したら、最初の投稿から基本バージョンを試してください。助けてくれてありがとう@mindthemonkey
ジャイルズ

1
宛先ディレクトリが存在しない場合、「Is a directory」というエラーが表示されます。
マット

1
はい、私も、ディレクトリが存在しないことを考えると奇妙なエラーのようなものです。
ジャイルズ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.