rsync를 사용하여 디렉토리간에 파일을 이동 (복사하지 않음)합니까?


54

rsync 를 사용하여 한동안 파일을 복사했습니다. 내 이해는 전송할 파일 중 일부가 대상 디렉토리에 이미있을 때 rsynccp 보다 빠르다는 것 입니다. 즉, 증분 차이 (예 : "델타") 만 전송합니다.

이것이 맞다면, rsync 를 사용하여 폴더 A 의 내용 , 예를 들어 폴더 B 의 내용을 B 가 비어있는 상태 로 옮기는 것이 유리 합니까?

폴더 A 는 1TB에 가까운 데이터 (그리고 그 안에 수백만 개의 파일)가 있습니다. 전송은 로컬 네트워크를 통해 수행 됩니다 ( AB서로 다른 파일 시스템에 있으며 둘 다 수퍼 컴퓨터에 마운트되어 있습니다 (예 : ANFS 이고 B광택 )).

그 외에도, rsync 에게 파일을 A 에서 B 로 이동 (복사하지 않도록) 하도록 요청 하려면 (즉 , 전송이 성공적으로 완료되면 A 를 삭제하려면 ) 어떤 플래그를 사용해야 합니까?


7
나는 rsync교체 할 수 없다고 생각 mv합니다. mv소스와 대상이 동일한 파일 시스템 내에있을 때 대부분의 파일 시스템 유형에서 더 빠를 것으로 예상 됩니다. 왜냐하면 rsync무엇이든 상관없이 사본을 만들어야하고 mv디렉토리 항목을 변경하여 벗어날 수 있기 때문 입니다 . 내가 찾을 수있는 가장 가까운 것은 rsync mv은 IS --remove-source-files명령,하지만 디렉토리를 제거하지 않습니다.
jw013

1
감사합니다 @ jw013! 명확히하기 위해 파일은 다른 파일 시스템에 있으며 전송은 네트워크에서 수행됩니다 . 그래도 mv더 빨라질 지 아십니까?
Amelio Vazquez-Reina

1
음, mv네트워크를 통해 작동 할 수 없습니다 - 그것은 로컬 마운트 (예 : NFS)에 의존해야합니다. 병목 현상이 네트워크 인 경우 압축을 수행 할 수 있기 때문에 rsync속도가 더 빠를 수 있습니다. mvrsync
jw013

2
그런데 cp-u는 대상 파일 또는 대상 파일이없는 것보다 최신 버전 인 경우 원본 파일을 복사하는 옵션
러시

답변:


69

--remove-source-files파일을 복사하는 대신 rsync로 전달 하여 파일을 이동할 수 있습니다.

그러나 귀하의 경우 대상이 비어 ​​있기 때문에 rsync를 사용할 필요가 없습니다. 평원 mv은 가능한 빨리 일을 할 것입니다.

경우에 따라 NFS, Samba, sshfs, sftp, ssh를 통한 rsync, star로 파이프 된 tar 등을 선택할 수있는 경우 성능에 차이를 줄 수있는 것은 네트워크 프로토콜의 선택입니다. 파일 크기, 네트워크 및 디스크 대역폭 및 기타 요인에 대해 일반적인 조언을 제공 할 방법이 없으므로 자체 벤치 마크를 실행해야합니다.


6
예를 들어 비정상적인 네트워크로 인한 손상이 걱정된다면 Caleb의 말을 되풀이하면 rsync는 블록을 쓸 때 블록을 체크섬하여 모든 파일을 확인하므로 의미가 있습니다.
다니엘 S. 스털링

5
--remove-source-files단지는 소스에있는 파일을 삭제합니다. 소스를 지우려면 rsync가 성공적으로 실행 된 후 소스 에서 rm -rf (또는 find모든 디렉토리와 패스 -delete) 를 수행하지 않아도 됩니까?
Trevor Boyd Smith

1
@ DanielS.Sterling rsync는 블록을 작성한 후 체크섬 블록을 검사하지 않습니다 (체크섬을 사용하여 기존 파일의 어떤 부분이 업데이트되어 동기화되어야하는지 찾습니다). 두 번째 동기화를 수행 --checksum하여 첫 번째 동기화 결과를 확인하도록 할 수 있습니다 .
Clément

19

--remove-source-files디렉토리를 제거하지 않기 때문에 다음 명령을 실행하여 ssh 파일 을 이동 합니다.

rsync -avh --progress --remove-source-files /home/user/mystuff/* user@external.server:/home/user/backup
find . -type d -empty -delete

--progress이 전송을 수동으로 수행하므로 개인적 으로이 기능이 마음에 듭니다. 스크립트를 사용하는 경우 제거하십시오. 전송이 약간 느려질 것으로 예상합니다. find명령의 삭제 옵션은 빈 디렉토리를 삭제 - 사용하지 않는 rm -rf이 파일이 전송되지 않은 경우 비어 있지 않은 디렉토리를 삭제할 수 있습니다로. 이 -delete옵션은 -depth빈 디렉토리 트리가 "하단"에서 삭제되도록 옵션을 설정합니다.


3
-delete보다 훨씬 좋네요 -exec rmdir {} +
lkraav

1
별표를 건너 뛰고 로컬 에서이 작업을 수행하는 경우 경로에 슬래시가 있고 경로가 있습니다. 별표를 사용하면 rsync는 .htaccess 또는 .htpasswd (있는 경우)와 같은 숨겨진 파일을 건너 뜁니다.
Svetoslav Marinov

16

Gilles가 말했듯 이 일반적으로 동일한 작업을 더 간단하게 수행 rsync할 때 파일을 이동 하는 데 이점 mv이 없으며 일반 파일 시스템간에 잠재적 인 속도 향상이 없습니다.

그러나 이점이있을 때가 있습니다. 특히, 소스, 대상 또는 작업을 수행하는 기계의 안정성에 대해 의문이있는 경우를 사용 rsync하면 재개 기능이 제공됩니다. 전송이 매우 커서 전력망을 신뢰할 수없는 경우이 점이 두드러집니다. rsync를 사용하면 장애 발생시 데이터 손상을 피하고 중단 한 부분을 포착 할 수있는보다 안정적인 방법이됩니다.


4
나는 이것이 큰 장점이라고 말하고 싶다. 사실, mv대상과 소스가 동일한 파티션에있는 경우에만 더 좋으므로 mv복사하지 않고 파일의 메타 데이터 만 편집합니다.
nomen

2
rsyncmv 대신 한 번은 폴더 구조를 유지하려는 경우입니다 (을 사용하는 경우 --relative).
Sridhar Sarnobat

14

rsync를 사용하여 폴더 A의 내용, 즉 폴더 B를 B가 비어있는 상태로 이동하면 이점이 있습니까?

mv가 디렉토리의 파일 수를 처리 할 수 ​​없기 때문에 rsync가 mv보다 빠른 상황에서 나 자신을 발견했습니다. 보안 카메라에서 20 일 동안 실행 된 180 만 장의 사진이 있는데 mv 명령은 리소스를 할당 할 수 없기 때문에 실패로 종료됩니다.

그러나 rsync는 문제없이 모든 파일을 처리하는 것으로 보입니다.


1

디렉토리 를 재귀 적으로 병합 하려면 디렉토리 이름이 중복 되는 디렉토리를 다른 디렉토리로 옮기 십시오 . 여기 에서 serverfault.com의 대답을 참조하십시오 . mv동일한 이름의 디렉토리가 존재하는 경우 작업이 제대로 수행되지 rsync않고 모든 파일을 이동하는 대신 (메타 데이터 만 읽고 쓰기) 모든 파일을 복사 (읽기 + 전체 데이터 쓰기)합니다.


0

Linux mv 명령처럼 rsync를 사용하여 실제로 파일을 이동할 수있는 방법이 없습니다. --remove-source-files를 사용하면 기본적으로 파일을 대상으로 복사 한 다음 소스에서 파일 (디렉토리 제외)을 삭제합니다. 이렇게하면 파일 이동 목적을 달성 할 수 있지만 시간이나 I / O 작업을 절약 할 수는 없습니다.

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