![폴더 구조를 유지하면서 디렉토리에서 파일의 하위 집합을 복사하는 방법은 무엇입니까?](https://linux55.com/image/1038/%ED%8F%B4%EB%8D%94%20%EA%B5%AC%EC%A1%B0%EB%A5%BC%20%EC%9C%A0%EC%A7%80%ED%95%98%EB%A9%B4%EC%84%9C%20%EB%94%94%EB%A0%89%ED%86%A0%EB%A6%AC%EC%97%90%EC%84%9C%20%ED%8C%8C%EC%9D%BC%EC%9D%98%20%ED%95%98%EC%9C%84%20%EC%A7%91%ED%95%A9%EC%9D%84%20%EB%B3%B5%EC%82%AC%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
파일의 일부 하위 집합을 dirA에서 dirB로 이동하고 싶지만(파일 이름에 "blah"가 포함된 파일 가정) 모든 중첩 디렉터리가 새 위치에서 동일해지기를 원합니다. 어떻게 해야 하나요?
답변1
rsync
필터 규칙의 마법:
$ rsync -av --filter="+ */" --filter="-! *blah*" /source /dest
필터링 규칙에 대한 자세한 내용은 매뉴얼 페이지를 참조하십시오 rsync
. 그러나 여기에는 이러한 특정 요구 사항에 대한 요약 버전이 있습니다.
--filter="+ */"
"디렉토리에 모든 것을 포함한다"는 뜻
--filter="-! *blah*
"파일 이름에 어쩌구 저쩌구(blah)가 포함되지 않은 모든 항목을 제외합니다"를 의미합니다.
답변2
이러한 파일을 복사해야 하는 경우 cp는 다음을 수행합니다.
cd dirA
find . -iname "*blah*" | xargs -If cp --parents f dirB
옵션 --parents
보존 하위 디렉터리 - 대상에 대한 전체 디렉터리 경로를 생성합니다.
답변3
이것은 나에게 효과적입니다.
rsync -ave 'ssh -p 22' --filter="+ */" --exclude="*_blah.blah" [email protected]:/source/directory/ /destination/directory/
스위치는 전송 프로토콜을 -e
정의 rsync
하며 포트는 입니다 -p 22
. 또한 /
프로그램이 디렉토리를 다루고 있음을 알리려면 후행 슬래시가 중요합니다.
근무일에 추가 시간을 내주신 @pdo에게 감사드립니다!