대상 폴더에 이미 존재하는 폴더 복사/이동

대상 폴더에 이미 존재하는 폴더 복사/이동

"folder"라는 폴더를 이미 "folder"가 포함된 디렉터리로 복사/이동하는 bash 스크립트를 작성 중이며 내용을 병합하고 싶습니다.

나는 이 문제에 대한 해결책을 사용하려고 합니다.

mv를 사용하여 폴더를 병합하시겠습니까?

cp -rl source/folder destination
rm -r source/folder

터미널에 첫 번째 줄을 입력하면 원본 "폴더"와 대상 "폴더"가 예상대로 병합됩니다.

그러나 병합된 폴더 대신 해당 줄이 포함된 스크립트를 실행하면 이제 대상에 "폴더"와 "공백"이라는 두 개의 폴더가 포함됩니다. 여기서 "공백"에는 소스 "폴더"의 내용이 포함됩니다.

답변1

SOURCE를 DESTINATION에 추가하면 SOUCE+DESTINATION이 더 복잡해집니다. (자신의 경우) 찾아보세요.

 man append 

당신은 시도 할 수 있습니다:

    cp  --recursive  --preserve --update  SOURCE DESTINATION     

지정된 속성(기본값: 모드, 소유권, 타임스탬프) 및 가능한 경우 추가 속성: context, link, xattr, all을 유지하려면 "--preserve"를 사용하세요.

디렉터리를 재귀적으로 복사하려면 "--recursive"를 사용하세요.

원본 파일이 대상 파일보다 최신이거나 대상 파일이 누락된 경우 "--update"를 사용하여 복사합니다.

터미널 도움말:

   cp --help   

또는

  man cp  

터미널이 작동하면 bash 스크립트에서 시도해 보세요.

.

답변2

더 나은 접근 방식은 더 나은 도구를 사용하는 것이라고 생각합니다.

rsync -avhP --remove-source-files "source/folder" destination

-a보관용(사용자/그룹, 스키마 등을 그대로 유지)

-v장황하게 설명하기 위해 그것이 무엇을 하고 있는지 관찰할 수 있습니다.

-h나는 사람이 읽을 수 있는 정보를 좋아하기 때문에

-P따라서 rsync는 만일의 경우에 대비하여 부분 전송을 수신합니다.

--remove-source-filesrsync로 전송된 모든 것을 삭제합니다

정리 작업을 위해 빈 폴더를 삭제해야 하는 경우가 종종 있습니다.

find source/folder -type d -exec rmdir {} \;

이것을 앞에 추가하면 zsh10 repeat 10레벨 깊이의 빈 폴더가 지워집니다. :-)

관련 정보