web-dev-qa-db-ja.com

Scpを使用する場合、ファイルの上書きを防止します

Scpを使用していくつかのファイルをコピーしていましたが、すでに存在するファイルを上書きしたくありません。

Cpコマンドを使用していた場合、これはcp -nを使用して実行できると思います。

Scpに同様のオプションはありますか、SCPのドキュメントを調べましたが、そのようなオプションはないようです。

Rsyncまたはsftpはこの問題を解決する方法ですか?

追加情報:

OS:Ubuntu 12.04

38
Desert Ice

rsyncが問題の解決策のようです。 here から得た例です。

rsync -avz foo:src/bar /data/tmp

-aオプションは、許可、ディレクトリ構造、所有権、およびシンボリックリンクを保持します。これらのオプションを個別に指定することもできます。

-vおよび-zは、それぞれ冗長および圧縮を意味します。大きなファイルをコピーする場合は-zがいいですが、実際には必要ありません。

35
osulehria

簡単なハックを見つけました。既存のファイルを読み取り専用としてマークします。

15
Bruno
rsync -avz --ignore-existing /source folder/* [email protected]:/dstfolder/

--ignore-existingは、リモートサーバーまたは宛先サーバー上のファイルを上書きしません*。

10
Asif Khan

私はこれに過去にrsyncを使用しましたが、CopSSHを使用してrsyncを使用せずにWindowsボックスから取得しようとしていることに気付きました:-( sftpインスタンスへの複数の「get」リクエストを生成します。

(  echo  'cd work/ftp/' ; 
   ssh <user>@<machine> 'cd work/ftp/ && ls -1 ITEM_SALE_SUMMARY_V.*.dat.xz' |
   while read line; do [[ -f "$line" ]] || echo get "$line"; done 
) | sftp  <user>@<machine>

他の人が非rsyncソリューションを必要とする場合に備えて!

0
dsz

rsync over ssh する必要があります。

0
vladr

他のソリューションを補うためだけに:

1つのascii/binファイルについては、次の方法で実行できます。

cat source_file | ssh Host "test ! -f target_file && cat > target_file"

0
SkyRaT