공개 키와 비밀번호가 모두 필요한 클러스터에서 작업 중입니다. 이 클러스터에서 작업을 구성하기에는 파일 구조가 복잡하고 일부 디렉터리만 로컬 시스템에 백업하고 싶습니다.
rsync가 "backup"이라는 파일이 있는 디렉토리만 가져오도록 하고 싶습니다. 예:
data/sub1/sub1_1/backup < back up this directory
data/sub1/sub1_2/ < don't back up
이 비밀번호 때문에 ssh를 여러 번 호출하는 스크립트를 피하고 싶습니다. rsync로 이를 수행할 수 있는 고급 필터가 있습니까?
답변1
백업할 디렉터리 수가 너무 크지 않으면 bash 쉘스크립트를 사용하여 명령줄에 넣을 수 있습니다. 다음 쉘스크립트는 데모입니다.
디렉토리 구조
$ tree data
data
└── sub1
├── sub1_1
│ ├── a
│ ├── b
│ └── backup
├── sub1_2
│ └── c
└── sub1_3
├── backup
└── d
4 directories, 6 files
쉘스크립트rsyncer
#!/bin/bash
echo -n 'rsync -avn ' > command
find . -name 'backup' -type f | sed -e 's%/backup%%' -e 's%.*%"&"%' | tr '\n' ' ' >> command
echo ' target/' >> command
bash command
드라이런
$ ./rsyncer
sending incremental file list
created directory target
sub1_1/
sub1_1/a
sub1_1/b
sub1_1/backup
sub1_3/
sub1_3/backup
sub1_3/d
sent 199 bytes received 64 bytes 526.00 bytes/sec
total size is 0 speedup is 0.00 (DRY RUN)
sub1/sub1_에 주목하세요.2그리고 파일씨목록에 없습니다.
지원
쉘스크립트의 rsync에서 옵션을 제거 n
하고 실행하거나 파일에서 command
실행합니다.
sed 's/-avn/-av/' command > buper
$ bash buper
sending incremental file list
created directory target
sub1_1/
sub1_1/a
sub1_1/b
sub1_1/backup
sub1_3/
sub1_3/backup
sub1_3/d
sent 383 bytes received 148 bytes 1,062.00 bytes/sec
total size is 0 speedup is 0.00
$ tree target
target
├── sub1_1
│ ├── a
│ ├── b
│ └── backup
└── sub1_3
├── backup
└── d
2 directories, 5 files
sub1/sub1_에 주목하세요.2그리고 파일씨목록에 없습니다.
답변2
어쩌면 비슷한 것을 사용할 수도 있습니다.
find
관심 있는 파일을 찾으려면 명령을 사용하십시오 .dirname
파일이 저장된 디렉토리 이름을 인쇄하려면 이를 입력하십시오 .uniq
디렉토리가 하나만 나열되도록 사용하십시오 .- rsync에서 결과를 반복하거나 함께 모아서 rsync가 한 번만 호출되도록 합니다.
간단한 스크립트:
for i in $(find . -name 'backup' -type f | xargs dirname | uniq); do
echo "here: $i"
# here goes rsync
done