Scpを使用していくつかのファイルをコピーしていましたが、すでに存在するファイルを上書きしたくありません。
Cpコマンドを使用していた場合、これはcp -nを使用して実行できると思います。
Scpに同様のオプションはありますか、SCPのドキュメントを調べましたが、そのようなオプションはないようです。
Rsyncまたはsftpはこの問題を解決する方法ですか?
追加情報:
OS:Ubuntu 12.04
rsync
が問題の解決策のようです。 here から得た例です。
rsync -avz foo:src/bar /data/tmp
-aオプションは、許可、ディレクトリ構造、所有権、およびシンボリックリンクを保持します。これらのオプションを個別に指定することもできます。
-vおよび-zは、それぞれ冗長および圧縮を意味します。大きなファイルをコピーする場合は-zがいいですが、実際には必要ありません。
簡単なハックを見つけました。既存のファイルを読み取り専用としてマークします。
rsync -avz --ignore-existing /source folder/* user@remoteserver:/dstfolder/
--ignore-existing
は、リモートサーバーまたは宛先サーバー上のファイルを上書きしません*。
私はこれに過去に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ソリューションを必要とする場合に備えて!
rsync over ssh する必要があります。
他のソリューションを補うためだけに:
1つのascii/binファイルについては、次の方法で実行できます。
cat source_file | ssh Host "test ! -f target_file && cat > target_file"