저는 CentOS 리눅스를 사용하고 있습니다.
성공하면 0을 반환하고 실패하면 0이 아닌 값을 반환하는 cmd 줄에는 다음이 필요합니다.
- 원격 서버로 파일을 전송합니다.
- 해당 파일명이 원격 서버에 존재하는 경우 파일이 전송되지 않습니다(0이 아닌 값을 반환).
을 사용해볼까 했는데 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
답변2
먼저 파일이 원격 호스트에 존재하는지 확인하십시오.
if ! ssh remotehost [ -f incoming/DB1026910.sql ]; then
scp DB1026910.sql remotehost:incoming/
fi