한 폴더에서 다른 폴더로 모든 파일과 하위 디렉터리를 어떻게 이동합니까? mv 명령은 하위 디렉터리를 이동하지 않습니다.

한 폴더에서 다른 폴더로 모든 파일과 하위 디렉터리를 어떻게 이동합니까? mv 명령은 하위 디렉터리를 이동하지 않습니다.

하위 디렉터리와 해당 파일을 포함한 모든 파일과 폴더를 다른 폴더와 해당 하위 폴더로 이동하고 덮어쓰고 싶습니다.

다음 명령을 시도했지만 하위 디렉터리와 해당 파일에서는 작동하지 않습니다.

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

관련 정보