rsync는 일부 파일이 누락된 소스의 새 파일만 복사합니다.

rsync는 일부 파일이 누락된 소스의 새 파일만 복사합니다.

rsync최근에 저는 많은 파일과 하위 디렉터리가 포함된 큰 디렉터리를 외장 하드 드라이브에 복사 해 왔습니다 . 일부 파일에는 파일 이름이 너무 길어서 rsync복사할 수 없습니다. 문제가 있는 파일 이름을 잘라낸 후 이제 결과 새 파일을 복사하고 싶습니다.

원본 디렉터리에 내가 삭제한 파일이 일부 있지만 대상 디렉터리의 어떤 파일도 내가 삭제하는 것을 원하지 않습니다 rsync. 소스에서 새 파일을 복사하고 마지막으로 소스와 대상 사이에 공통된 모든 파일을 소스에서 제거하는 동안 소스에 미러링되지 않고 그대로 유지되기를 원합니다( --remove-from-source).

rsync -nrhtPsv --stats --ignore-existing --remove-source-files /run/media/username/hdd1/DIR1 /run/media/username/external_hdd

내가 아는 한, --ignore-existing둘은 --remove-source-files호환되지 않습니다.

--ignore-existing그리고 --update연습 실행에서는 삭제/삭제에 대한 정보가 표시되지 않지만 모두 파일이 누락된 디렉터리의 경로가 나열됩니다.

내가 원하는 것을 어떤 명령으로 수행할 수 있나요?

답변1

다양한 표준:

  • 대상 디렉토리의 어떤 것도 삭제되는 것을 원하지 않습니다rsync- 지정하지 않음--delete
  • [...]에서 새 파일을 복사하고 싶습니다.- 평소처럼
  • 소스와 대상 간에 공통되는 모든 파일을 소스에서 제거합니다.- 사용--remove-source-files

당신이 언급하지 않은 것은 대상의 기존 파일을 업데이트해야 하는지 여부이므로 업데이트되어야 한다고 가정합니다.

결과 명령은 다음과 같습니다.

rsync --dry-run -rt -Phv --stats --remove-source-files /run/media/username/hdd1/DIR1 /run/media/username/external_hdd

( --dry-run변경 사항을 보기만 하는 것이 아니라 수행하려면 제거하세요.)

현재 발생한 문제는 제외 규칙으로 구현되었습니다 --ignore-existing --remove-source-files. --ignore-existing이는 대상에 존재하는 파일이 무시되지만 무시될 수 없음을 의미합니다 --remove-source-files. 사례에 따라 --backup --remove-source-files다음을 사용하여 대상에서 백업을 복원할 수 있습니다.

find /run/media/username/external_hdd -type f -name '*~' -exec sh 'for f in "$@"; do echo mv -f "${f} "${f%~}"; done' _ {} +

( echo보기만 하는 것이 아니라 이름 바꾸기를 수행하려면 제거하세요.)

관련 정보