소스에서 대상으로 파일을 이동하기 위해 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″과 같은 다른 폴더가있는 경우 (서버 B에 “/ process / calc1″이 이미 존재하는 경우) rsync는 어떻게 서버 B에서 충돌을 관리합니까?

rsync로 규칙을 추가하고 서버 B에서 “process / calc1R2″로 “/ process / calc1″의 이름을 바꿀 수 있습니까? 그리고 (ex : calc1R3)?

감사.



답변

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/

이것이 당신이 무엇을 겪고 있는지 과잉인지 확실하지 않지만 요구 사항을 충족해야합니다.


답변

이름에서 알 수 있듯이 rsync는 파일 동기화에 사용됩니다. “동기화”되면 소스 및 대상의 파일이 동일 함을 의미합니다. 그것은 당신이하고 싶은 것처럼 보이지 않습니다.

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


답변

SSH의 경우 요약하면 다음을 사용하십시오.

원격 쉘을 통한 액세스 :

풀 : rsync [OPTION …] [USER @] HOST : SRC … [DEST]

푸시 : rsync [OPTION …] SRC … [USER @] HOST : DEST

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

암호를 요구하지 않고 ssh를 자동으로 재 동기화하기 위해 cronjob을 위해 스크립팅하는 경우 ssh-agent (1)도 살펴보십시오.