디렉터리(하위 디렉터리 및 파일 포함)를 다른 디렉터리로 이동하려고 합니다. 일부 mv
폴더는 파일이 동일한 디렉터리에 존재하기 때문에 병합되지 않습니다. 이는 소스 디렉터리에 있는 파일이 최신 버전이라 하더라도 이동하면 삭제되기 때문에 좋지 않습니다.
다음 명령이 필요합니다.
- 대상 디렉터리에 존재하지 않는 디렉터리를 이동합니다.
- 대상 디렉터리에 이미 존재하는 디렉터리를 병합합니다.
- 중복된 파일의 이름을 바꿉니다(예:
file.txt
이미 존재하는 경우 소스 파일의 이름을 로 바꿉니다file(1).txt
).
나는 이 모든 것을 처리하는 것을 찾지 못했습니다.
편집하다
다음 명령을 사용해 보았습니다.
mv -u [source] [destination]
대상에 존재하지 않는 디렉터리만 이동하며, 중복된 내용이 있는 디렉터리는 삭제된다고 생각합니다. 따라서 원본 디렉터리의 모든 최신 파일은 이동 시 손실됩니다. 대신 이러한 디렉터리를 병합하고 중복된 파일의 이름을 바꿔야 합니다. 내가 그것을 충분히 잘 설명했기를 바랍니다.
PS 이것은 터미널 명령으로 작성된 경우 가장 잘 작동합니다. 스크립트를 만든 경험이 없습니다.
도와주셔서 감사합니다!
답변1
파일이 생각했던 대로 이동하지 않을 수도 있습니다. -t
or -T
옵션 을 사용하는 것이 좋습니다 mv
.
답변2
이것이 내가 필요한 것을 달성하기 위해 사용하게 된 것입니다. 완벽하지는 않지만 많은 디렉토리가 이동되었으므로 이동/병합이 99% 완료되었습니다.
먼저 "mv"를 사용하여 모든 디렉토리를 존재하지 않는 새로운 대상으로 이동했습니다. 각 대상 폴더에는 "a, b, c..."라는 레이블이 지정됩니다. "A"로 시작하는 각 소스 디렉터리를 해당 대상 디렉터리("a")로 이동하고 싶습니다.
mv -u /[source directory]/A* /[destination directory]/a && mv -u /[source directory]/B* /[destination directory]/b && so on and so on...
%가 이미 대상에 존재하므로 모든 디렉터리를 이동하지는 않습니다. 다음으로 rsync
위와 매우 유사한 명령을 실행합니다 .
rsync --progress --remove-source-files -arvu /[source directory]/A* /[destination directory]/a && rsync --progress --remove-source-files -arvu /[source directory]/B* /[destination directory]/b && and so on and so on...
내 대상 디렉토리는 AZ와 0-9였으므로 문자와 숫자를 변경하면서 이 명령을 계속해서 실행하고 명령을 &&
. 명령 .
이를 달성하기 위해 다음 명령을 실행했습니다.
find . -type d -empty -print -delete
이는 rsync가 남긴 빈 디렉토리를 처리합니다. rsync를 통해 이 모든 작업을 수행할 수 있나요? 나는 모른다. 저는 새로운 것을 배우기 위해 이곳에 온 초보자입니다.
내가 말했듯이 완벽하지는 않지만 나에게는 효과가 있었고 이것이 다른 사람들에게도 도움이 되기를 바랍니다.