rsync 제외 및 포함 문제는 제외 디렉터리에 파일을 포함합니다.

rsync 제외 및 포함 문제는 제외 디렉터리에 파일을 포함합니다.

을 사용하여 다음 작업을 수행하고 싶습니다 rsync.

디렉토리 구조 예

  • 홈/netadmin/docker-data
  • 홈/netadmin/docker-data/uptime-kuma/
  • 홈/netadmin/docker-data/uptime-kuma/error.log

rsync디렉토리를 원 docker-data하지만 home/netadmin/docker-data/uptime-kuma/디렉토리를 제외하고 싶지만 home/netadmin/docker-data/uptime-kuma/error.log.

다음 명령을 사용하고 있습니다.

rsync -av --delete --include-from='/home/netadmin/include.txt' --exclude-from='/home/netadmin/exclude.txt' /home/netadmin/docker-data /home/netadmin/temp/

디렉터리는 제외되지만 파일은 복사되지 않습니다.

내 질문은 이것이 가능합니까?

내 포함 및 제외 파일은 다음과 같습니다.

제외.txt

uptime-kuma/

.txt를 포함합니다

+ error.log

답변1

그 "트릭"은아니요디렉터리를 제외 uptime-kuma하지만 내용은 제외하지 않습니다.

포함 및 제외 패턴을 사용하면 error.log해당 하위 디렉터리의 다른 모든 항목을 제외하기 전에 uptime-kuma/*파일을 포함 할 수 있습니다.uptime-kuma/error.log

uptime-kuma/대신 을 사용하면 uptime-kuma/*디렉터리를 제외하고 rsync디렉터리 내부를 절대 볼 수 없습니다.

rsync -av --delete \
    --include=error.log \
    --exclude='uptime-kume/*' \
    ~netadmin/docker-data ~netadmin/temp/

나는 이것이 동등한 테스트가 되기를 바랍니다:

$ tree
.
`-- topdir
    |-- file-1
    |-- file-2
    |-- file-3
    |-- file-4
    |-- file-5
    `-- subdir
        |-- file-a
        |-- file-b
        |-- file-c
        |-- file-d
        |-- file-e
        `-- myfile

2 directories, 11 files
$ rsync -av --include=myfile --exclude='subdir/*' topdir/ copydir
sending incremental file list
created directory copydir
./
file-1
file-2
file-3
file-4
file-5
subdir/
subdir/myfile

sent 436 bytes  received 171 bytes  1,214.00 bytes/sec
total size is 0  speedup is 0.00
$ tree copydir
copydir
|-- file-1
|-- file-2
|-- file-3
|-- file-4
|-- file-5
`-- subdir
    `-- myfile

1 directory, 6 files

팁: rsync사용하면 어떤 항목이 포함되거나 제외되는 이유를 이해할 수 있습니다 -vv.

"error"를 사용한 제외 패턴은 다음과 같습니다.

$ rm -r copydir
$ rsync -avv --include=myfile --exclude='subdir/' topdir/ copydir
sending incremental file list
[sender] hiding directory subdir because of pattern subdir/
created directory copydir
delta-transmission disabled for local transfer or --whole-file
./
file-1
file-2
file-3
file-4
file-5
total: matches=0  hash_hits=0  false_alarms=0 data=0

sent 326 bytes  received 211 bytes  1,074.00 bytes/sec
total size is 0  speedup is 0.00

이는 "올바른" 제외 패턴을 사용하고 있습니다.

$ rm -r copydir
$ rsync -avv --include=myfile --exclude='subdir/*' topdir/ copydir
sending incremental file list
[sender] hiding file subdir/file-a because of pattern subdir/*
[sender] hiding file subdir/file-b because of pattern subdir/*
[sender] hiding file subdir/file-c because of pattern subdir/*
[sender] hiding file subdir/file-d because of pattern subdir/*
[sender] hiding file subdir/file-e because of pattern subdir/*
[sender] showing file subdir/myfile because of pattern myfile
created directory copydir
delta-transmission disabled for local transfer or --whole-file
./
file-1
file-2
file-3
file-4
file-5
[generator] risking file subdir/myfile because of pattern myfile
subdir/
subdir/myfile
total: matches=0  hash_hits=0  false_alarms=0 data=0

sent 436 bytes  received 307 bytes  1,486.00 bytes/sec
total size is 0  speedup is 0.00

답변2

다른 방법을 찾았습니다. 나는 사용한다

cp --parents

내가 원하는 제외 디렉터리의 특정 파일만 복사하고 디렉터리 구조를 유지하는 옵션입니다.

관련 정보