rsync - 최상위 파일을 포함하고 디렉터리를 제외합니다.

rsync - 최상위 파일을 포함하고 디렉터리를 제외합니다.

file1.txt모든 최상위 파일( , file2) 을 포함하고 싶습니다 /top/dir1/. 어떻게 해야 합니까?

다음 방법을 시도했지만 작동하지 않습니다.

$ tree
.
└── from
    ├── file1.txt
    ├── file2
    └── top
        ├── dir1
        │   └── file3.txt
        └── dir2
            └── file4.txt

한 번의 시도로 인해 최상위 파일이 누락되었습니다.

$ rsync --dry-run \
>       --include='top/' \
>       --include='top/dir1/' \
>       --include='top/dir1/***' \
>       --exclude='top/*' \
>       --exclude="*" \
>       -av from/* .
building file list ... done
top/
top/dir1/
top/dir1/file3.txt

다른 시도에는 최상위 파일이 포함되지만 dir2는 제외되지 않습니다.

$ rsync --dry-run \
>       --include="*" \
>       --include='top/' \
>       --include='top/dir1/' \
>       --include='top/dir1/***' \
>       --exclude='top/*' \
>       --exclude="*" \
>       -av from/* .
building file list ... done
file1.txt
file2
top/
top/dir1/
top/dir1/file3.txt
top/dir2/
top/dir2/file4.txt

답변1

rsync의 소스 경로에서 사용 하지 마십시오 *. rsync는 이러한 항목을 자체적으로 완벽하게 찾을 수 있습니다.

이렇게 하면 효과적으로 rsync를 호출할 수 있습니다.

rsync --dry-run \
   --include="*" \
   --include='top/' \
   --include='top/dir1/' \
   --include='top/dir1/***' \
   --exclude='top/*' \
   --exclude="*" \
   -av from/file1.txt from/file2 from/top .

포함 및 제외 패턴은 소스 루트를 기준으로 하므로 --include 'top/'동일한 패턴은 일치하지 않습니다.

이 작업을 수행:

rsync --dry-run \
   --include="/*" \
   --include='/top/' \
   --include='/top/dir1/' \
   --include='/top/dir1/***' \
   --exclude='/top/*' \
   --exclude="*" \
   -av from/ .

관련 정보