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