저는 공개 키와 비밀번호가 필요한 클러스터에서 작업하고 있는데, 이 클러스터에서 작업을 구성하기 위한 복잡한 파일 구조가 있고, 로컬 시스템에서 몇 개의 디렉터리만 백업하고 싶습니다.
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및 파일씨목록에 없습니다.
지원
n
쉘스크립트의 rsync에서 옵션을 제거하고 실행하거나, 파일에서 옵션을 제거 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
목록에만 so 디렉토리를 사용하십시오 .- rsync의 결과를 반복하거나 rsync가 한 번만 호출되도록 함께 배치합니다.
간단한 스크립트:
for i in $(find . -name 'backup' -type f | xargs dirname | uniq); do
echo "here: $i"
# here goes rsync
done