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
보기만 하는 것이 아니라 이름 바꾸기를 수행하려면 제거하세요.)