私はCentOS Linuxを使用しています。
成功した場合はゼロを返し、失敗した場合はゼロ以外の値を返すcmd行には次のものが必要です。
- リモートサーバーにファイルを転送します。
- そのファイル名がリモートサーバーに存在する場合、ファイルは送信されません(ゼロ以外の値を返します)。
を使ってみようかと思いましたが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