소스에서 대상으로 파일을 이동하기 위해 rsync를 얻습니까?


15

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)?

감사.

답변:


11

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를 사용하는 것이 좋습니다 (네트워킹 문제가있는 경우).
user44782

1

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

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


어떤 경우에는 동일한 계산을 다시 실행해야합니다 (그리고 그 이유는 같은 이름의 파일로 끝납니다). 런을 추가하는 것이 좋습니다 : mmv -a 명령도 찾으십시오 (ssh 모드에서 작동하기를 바랍니다. 누군가 이미이 명령 줄을 사용하고 있습니까?). 폴더 이름을 지정하는 방법을 제어 할 수 있습니다.
user44782

컴퓨터에 설치되지 않았을 가능성이 큽니다. 그것이 당신의 기계라면, 당신은 그것을 설치할 수 있습니다. 데비안 기반 : sudo apt-get install mmv sshfs 또는 NFS를 살펴보고 파일을 최종 대상으로 직접 출력 할 수도 있습니다. 중간 위치 (검사, 수정 등)가 필요하지 않는 한. 두 기계 사이의 연결이 신뢰할 수 없다면 그것은 나쁜 생각입니다. 바울의 제안은 좋습니다. 그러나 처음에 실행 번호를 추가하는 것이 더 체계적 일 것입니다.
d -_- b

1
ssh에서 "mv -n"을 어떻게 사용합니까? sshfs에서 mv를 사용할 수 있습니다.
guettli

작전 ... 네, 더 명확합니다.
d -_- b

-1

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

원격 쉘을 통한 액세스 :

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

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

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

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.