모든 파일과 폴더(하위 디렉터리와 해당 파일 포함)를 다른 폴더와 해당 하위 폴더로 이동하고 덮어쓰고 싶습니다.
다음 명령을 시도했지만 하위 디렉터리와 해당 파일에서는 작동하지 않습니다.
mv -f fromA/* toB/
mv -f fromA/{,.}* toB/
따라서 폴더 A의 모든 파일은 폴더 B로 이동되지만 A/sub에서 B/sub로 이동되지는 않습니다.
"fromA/subA"를 "toB/subB"로 이동할 수 없습니다. 파일이 존재합니다. 오류가 발생합니다.
각 폴더를 하나씩 살펴보면 작동하지만 뭔가 빠진 것이 확실합니다. 관련 답변이 전부는 아니지만 대부분을 보았지만 그 중 어느 것도 작동하지 않습니다.
답변1
info mv
이것이 있다:
_Note_: 'mv' will only replace empty directories in the destination.
Conflicting populated directories are skipped with a diagnostic.
이를 뒤집을 방법은 없을 것 같습니다. B를 삭제하고 A의 이름을 B로 바꾸거나 먼저 B의 디렉터리를 수동으로 지우거나 삭제합니다.
답변2
나는 사용하는 것이 좋습니다rsync
rsync를 사용하면 삭제할 파일을 지정하고 "테스트 실행"을 수행하여 실제로 실행할 때 어떤 일이 발생하는지 확인할 수도 있습니다.
노력하다
rsync -av --dry-run --delete-before fromA toB
--delete-before는 공간이 부족한 시스템에서 파일을 병합하는 데 적합합니다. 테스트 실행에 만족한다면 이 --dry-run
옵션을 제거하세요.
맨페이지를 확인하여 다양한 "제거" 옵션을 모두 확인하고 어떤 옵션이 자신에게 가장 적합한지 결정할 것을 권장합니다.
--delete-excluded
이동과 관련되지 않은 대상의 모든 파일을 삭제하려면 이 옵션을 사용하십시오 . 다시 한 번 --dry-run
실행하기 전에 제거될 내용을 확인하십시오.
전송 중에 소스 파일을 삭제하는 기능이 있지만 --remove-source-files
(mv와 마찬가지로) 디렉토리는 삭제하지 않습니다. 따라서 여전히 소스 디렉터리를 삭제해야 합니다.rm
답변3
귀하의 진술에 따르면 파일이 이미 존재한다는 오류가 발생합니다. "toB" 아래에 폴더와 파일이 이미 있습니까? 주로 "fromA"에서 "toB"로 파일을 병합하는 경우 파일을 재귀적으로 복사(cp -ar)한 다음 "fromA"를 제거하는 것이 좋습니다.
그렇지 않고 처음에 "toB"가 비어 있어야 하고 "toB"의 내용이 "fromA"와 동일한지 확인하려는 경우:
$ rm -rf toB
$ mv fromA toB