"folder"라는 폴더를 이미 "folder"가 포함된 디렉터리로 복사/이동하는 bash 스크립트를 작성 중이며 내용을 병합하고 싶습니다.
나는 이 문제에 대한 해결책을 사용하려고 합니다.
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-files
rsync로 전송된 모든 것을 삭제합니다
정리 작업을 위해 빈 폴더를 삭제해야 하는 경우가 종종 있습니다.
find source/folder -type d -exec rmdir {} \;
이것을 앞에 추가하면 zsh
10 repeat 10
레벨 깊이의 빈 폴더가 지워집니다. :-)