파일이 존재하지 않는 경우에만 파일을 바꾸지 않고 원격 디렉토리로 전송하십시오.

파일이 존재하지 않는 경우에만 파일을 바꾸지 않고 원격 디렉토리로 전송하십시오.

저는 CentOS 리눅스를 사용하고 있습니다.

성공하면 0을 반환하고 실패하면 0이 아닌 값을 반환하는 cmd 줄에는 다음이 필요합니다.

  1. 원격 서버로 파일을 전송합니다.
  2. 해당 파일명이 원격 서버에 존재하는 경우 파일이 전송되지 않습니다(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

관련 정보