rsync --dry-run 출력을 재사용하여 나중에 실제 전송 속도를 높입니다.


23

나는 보통 rsync -n실제하기 전에한다 rsync. 문제는 어떻게 두 번째 실행을 자동화하여 생성 된 목록을 정확하게 재사용 할 수 --dry-run있습니까?

내 말은, 내가 실행하면 rsync -n무엇 rsync을 할 것인지에 대한 시뮬레이션을 얻습니다 . 제 아이디어는 그 출력을 가져 와서 처리 한 다음 어떻게 든 그 출력 rsync만 만드는 --include-from것이므로 전체 목록은 한 번만 계산해야합니다.

이해가되지 않으면 알려주세요.

그건 그렇고, 나는 사용하는 경향이 있습니다 rsync -hva --progress --stats --delete --exclude-from "$EXCLUDEFILE". 어떤 옵션을 사용할 것인지에 대한 제안이 있으면 알려주십시오. 이미지, 비디오 및 문서 만 포함 된 외장 하드 드라이브의 내용을 다른 외장 하드 드라이브에 복제하려고합니다.


include.txt에서 파일 / 경로가 아닌 모든 행을 제거하고 실행중인 --dry-run명령 의 출력을 파일 (예 :)로 리디렉션 할 수 있습니다. rsync --dry-run -avz SOURCE DEST > include.txtrsync --include-from include.txt
ThatGuy

마지막 명령은이어야합니다 rsync --include-from include.txt --exclude=* SOURCE DEST. 자세한 내용은 stackoverflow.com/a/19296415/1765910 을 참조하십시오.
ThatGuy

그렇습니다. 아이디어입니다. 그러나 실제로 어떻게해야할지 모르겠습니다 (또한 그가하고있는 일을 실제로 알고있는 누군가의 승인을 원합니다). 난 그냥 사용 rsync하지만 쉘 스크립트 / bash에서 아무것도 몰라…
Manuel Manuel

답변:


18

드라 이런 중에 생성 된 파일 목록을 포함 파일로 사용할 수 있습니다. 그러나 이상적으로는 드라 이런 출력의 상단과 하단에있는 여분의 라인을 삭제해야합니다.

출력 예 :

sending incremental file list
[LIST OF FILES]

sent 226 bytes  received 34 bytes  520.00 bytes/sec
total size is 648,373,274  speedup is 2,493,743.36 (DRY RUN)

이 라인을 제거하려면 rsync출력을 안으로 head및 안으로 파이프하십시오 tail. 그런 다음 처리 된 출력을 포함 파일에 저장하십시오.

rsync --dry-run -avz source/ destination/ | head --lines=-3 | tail --lines=+3 > include.txt

마지막으로, rsync생성 된 포함 파일을 사용하도록 지시하십시오 (원하는대로 추가 옵션 추가).

rsync --include-from=include.txt --exclude=* source/ dest/


이것의 문제는 삭제 해야하는 파일에 대처하지 못한다는 것입니다. 그리고 방법이다 tail/ head강력한 충분한 파일의 목록을 가지고 보장하기 위해?
Manuel

추가 --delete하면 소스 디렉토리에서 삭제 된 파일이 적어도 내가 시도한 컴퓨터에서 대상 디렉토리에서도 삭제됩니다. tail/ head부분을 ​​완전히 생략 할 수 있습니다 . rsync포함 파일의 각 줄을 파일 이름으로 해석하고 존재하지 않는 파일을 무시하므로 여분의 줄을 유지하면 "증분 파일 목록 보내기"등의 파일이없는 경우가 아니면 아무 일도 일어나지 않습니다. 이 파일들도 복사됩니다).
ThatGuy
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.