2012-11-16 16 views
34

scpを使用していくつかのファイルをコピーしていて、すでに存在するファイルを上書きしたくない。Scpを使用しているときにファイルを上書きしないようにする

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

scpにも同様のオプションがありますが、私はSCPのドキュメントを参照しましたが、そのようなオプションはないようです。

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

追加情報:

OS:Ubuntuの12.04

答えて

33

rsyncは、問題の解決策であるようです。

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

-aオプションは、アクセス権、ディレクトリ構造、所有権、およびシンボリックリンクが保持されます:ここで私はhereからもらった例です。これらのオプションも個別に指定することもできます。

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

-1

私はそれをテストしなかったかもしれませんが、最初にsshfsでマウントしてから、cpを使ってマッチさせてください。

0

私は過去にこのためにrsyncを使っていましたが、CopSSHとrsyncがないWindowsのボックスから取得しようとしていました:-(以下は、ファイルテストを使用して、上書き、およびsftpのインスタンスにみとめ「取得の要求を生成する。

( 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のソリューションを必要と念のために!

15

私はちょうど簡単なハックを発見した。既読に既存のファイルは、 -only。

+0

: 'chmod uw srcfile; scp -p srcfile $ USER @ $ host:$ directory/'を実行します。 scpのmanページから: '-p元のファイルから変更時刻、アクセス時刻、モードを保持する.' –

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

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

0

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

1つのアスキー/ binファイルの場合は、あなたがそれを行うことができます:あなたは、既存のファイルを上書きしたくない場合は、完璧な理にかなっている

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

関連する問題