ファイルが存在しない場合にのみ、ファイルを置き換えずにリモートディレクトリに転送します。

ファイルが存在しない場合にのみ、ファイルを置き換えずにリモートディレクトリに転送します。

私はCentOS Linuxを使用しています。

成功した場合はゼロを返し、失敗した場合はゼロ以外の値を返すcmd行には次のものが必要です。

  1. リモートサーバーにファイルを転送します。
  2. そのファイル名がリモートサーバーに存在する場合、ファイルは送信されません(ゼロ以外の値を返します)。

を使ってみようかと思いましたがrsync、ファイル名が存在すれば 0 を返します。 scp既存のファイルを置き換えるので、私には役に立ちません。

転換点:このコマンドを実行するユーザーはいいえルートの場合、ファイルはこのユーザーが所有します。ターゲットは同じユーザーが所有しています。sshルートに信頼があります。ただし、このユーザーには適用されません。このコマンドは自動化されたスクリプトの一部であるため、パスワードの入力を求められません。事前設定ステップを使用できます。ワンタイム構成として追加できます。誰でも助けることができますか?

ベストアンサー1

メタデータを保存しない簡単な方法は次のとおりです。

ssh server.example.com 'set -C; cat >/path/to/remote/file' </path/to/local/file

正しいオプションでrsyncを使用してこれを行うことができます。ファイルが存在する場合、戻りコードは0になりますが、詳細な出力でこれを確認できます。

changes=$(rsync -a --ignore-existing --itemize-changes \
                /path/to/local/file server.example.com:/path/to/remote/file)
if [ $? -ne 0 ]; then
  echo >&2 "Some error occured"
  return 2
elif [ -n "$changes" ]; then
  echo "The file was copied"
  return 0
else
  echo "The file already existed"
  return 1
fi

おすすめ記事