rsync를 사용하여 파일을 소스에서 대상으로 이동하시겠습니까?

rsync를 사용하여 파일을 소스에서 대상으로 이동하시겠습니까?

rsync가 내 프로젝트에 적합한 선택인가요?

해야 할 일은 다음과 같습니다.
- SSH를 통해 소스에서 대상 폴더로 파일을 복사합니다.
- 모든 파일이 복사되었는지 확인합니다.
- 복사 후 소스 파일을 삭제합니다.
- 충돌하는 이름이 있으면 파일 이름을 바꿔야 합니다.

--remove-source-files 옵션을 사용할 수 있는 것 같습니다(소스 파일 삭제).
그러나 rsync가 충돌을 관리하는 방법에 규칙이 있을 수 있습니까?

내 프로젝트의 사용 사례:

서버 A에서 과학적 계산을 실행하고 결과가 "process" 폴더에 삽입됩니다. 각 계산에 대해 /process/calc1과 같은 저장소가 있습니다.
이제 "/calc1" 저장소를 서버 B로 전송하고(/process/calc1을 얻음) 서버 A에서 "calc1"을 삭제하고 싶습니다.
...다른 계산 중에 서버 A에서 "/process/calc2"를 얻습니다. 아이디어는 또한 서버 B의 "/process/" 디렉토리로 "calc2"를 이동하는 것입니다. 그런 다음 이제 서버 B에 있습니다.
- /process/calc1
- /process/calc2
(그리고 서버 A의 /process/는 비어 있습니다).

새로운 계산 후 서버 A에 "/process/calc1"과 같은 다른 폴더가 있는 경우("/process/calc1"이 서버 B에 이미 존재하는 경우) rsync는 서버 B에서 충돌을 어떻게 관리합니까?

rsync를 사용하여 규칙을 추가하고 서버 B에서 "process/calc1R2"로 "/process/calc1"의 이름을 바꿀 수 있습니까? 그리고 (예:calc1R3)?

감사해요.

답변1

rsync를 실제로 사용하려면 --backup, --backup-dir 및 --suffix의 조합이 필요할 것 같습니다. 내 생각에 당신이 얻을 수 있는 가장 가까운 것은 이와 같은 것입니다.

rsync -abv --suffix R1 --remove-source-files src/ dst/

이렇게 하면 원하는 결과에 가깝지만 원하는 대로 정확하게 파일 이름이 바뀌지는 않습니다. --suffix 옵션은 기존 파일 끝에 텍스트를 추가하지만 이는 첫 번째 충돌에 대해서만 수행됩니다. 다시 실행하면 첫 번째 백업을 덮어쓰게 됩니다. 명령이 실행될 때마다 해당 접미사 값을 변경해야 합니다. 이는 다음과 같이 타임스탬프가 있는 항목을 사용한 경우 작동합니다.

rsync -abv --suffix `date +%Y%m%d%k%M%S` --remove-source-files src/ dst/

이것이 귀하가 추구하는 것에 대해 과잉인지는 확실하지 않지만 귀하의 요구 사항을 충족해야 합니다.

답변2

이름에서 알 수 있듯이 rsync는 파일 동기화에 사용됩니다. "동기화"되면 원본과 대상의 파일이 동일하다는 의미입니다. 그것은 당신이 하고 싶은 일이 아닌 것 같습니다.

일부 파일을 이동하려는 것 같습니다. 이를 위해 rsync를 사용할 필요가 없습니다. Linux나 BSD를 사용하고 있는 것 같습니다. SSH를 통해 mv -n을 사용할 수 있습니다. -n 옵션은 기존 파일을 덮어쓰지 않습니다. 이는 100% 자동이 아닙니다. 그러나 귀하의 경우 파일이 어떻게 이미 존재할 수 있는지 알 수 없습니다. 파일은 소스에서 대상으로 복사된 다음 소스에서 제거됩니다. 동일한 계산을 다시 실행하시겠습니까? 그래서 같은 이름의 파일이 생기나요? 폴더 이름에 실행 또는 배치 번호를 추가하는 것이 좋습니다. 어쨌든 당신은 그것이 명확하기를 원할 것입니다. 폴더 이름 지정 방법을 제어할 수 있나요? 더 자세한 내용은 없나요? bash 스크립트나 이와 유사한 스크립트에 명령을 넣는 것이 좋습니다.

답변3

SSH의 경우 요약하면 다음을 사용합니다.

원격 셸을 통한 액세스:

풀: rsync [옵션...] [USER@]HOST:SRC... [대상]

푸시: rsync [옵션...] SRC... [USER@]HOST:DEST

rsync(1)에 모두 설명되어 있습니다.

cronjob에 대한 스크립팅에 관해서는 비밀번호를 요구하지 않고 ssh를 통해 자동으로 rsync하려면 ssh-agent(1)도 살펴보십시오.

관련 정보