rsync를 사용하여 소스 경로 수준에서 폴더(및 모든 내용)만 복사

rsync를 사용하여 소스 경로 수준에서 폴더(및 모든 내용)만 복사

f파일은 있지만 src디렉터리d ( f숨겨질 수도 있고 숨길 수도 있음)는 다음과 같은 트리가 있습니다 .

src/f1
src/f2
...
src/d1
src/d2
src/d3
...

dst동일한 구조를 폴더에 복사하지만 src해당 폴더에 있는 모든 파일을 제외하고 싶습니다 (예: f1위 트리의 , , 등. 그러나 f2다른 폴더의 내용은 제외). 즉, 폴더와 해당 내용(파일, 폴더, 링크, 장치 등)을 모두 복사하고 싶습니다.d1d2d3srcdst

파일을 하나만 사용해야 하며 rsync가급적이면 파일 하나만 사용해야 합니다(그러나 --exclude-from다른 방법도 환영합니다).rsync

앵커를 허용하고 " 슬래시 ( )를 제외한 모든 항목과 일치" 를 의미하기 /*때문에 제외 파일을 넣으려고 했지만 결과적으로 빈 폴더가 생성됩니다./src*/dst

매우 감사합니다

답변1

manrsync가 말했다:

option --filter=RULE, -f add a file-filtering RULE

그러니 한번 시도해 보세요

rsync -avr -f"+ */" -f"- *" /src/ /dest/

-f"+ */"-f"- *"모든 곳에서 파일이 삭제되면 디렉터리가 추가됩니다.

@Kusalananda가 말했듯이 이는 모든 하위 트리의 모든 파일을 방지합니다.

rsync -avr -f"+ */" -f"- /*" /src/ /dest/ 또는

rsync -avr --include="*/" --exclude="/*" /src/ /dest/ 트리 하위 디렉터리의 파일이 동기화됩니다.

답변2

works를 사용하여 소스 디렉터리의 모든 항목을 제외하려면 /*디렉터리를 다시 포함하면 됩니다.

sudo rsync -av --include='/*/' --exclude='/*' src/ dest
  • --exclude='/*'소스 디렉터리의 모든 파일/디렉터리 제외

  • --include='/*/'제외를 재정의하고 소스 디렉터리에 해당 디렉터리를 다시 포함합니다. 제외하기 전에 작성해야 합니다.

  • -a아카이브 모드, 바로가기-rlptgoD

    • -r디렉토리로 재귀
    • -l심볼릭 링크를 심볼릭 링크로 복사
    • -p예비 권한
    • -t수정 시간 유지
    • -g예약된 그룹
    • -o소유자 유지(수퍼유저만 해당)
    • -D장치 파일(수퍼유저만 해당)/특수 파일 보존
  • -v장황함을 증가시키다

관련 정보