을 사용하여 다음 작업을 수행하고 싶습니다 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
내가 원하는 제외 디렉터리의 특정 파일만 복사하고 디렉터리 구조를 유지하는 옵션입니다.