私は公開鍵とパスワードの両方を必要とするクラスターで作業しており、このクラスターでの作業を整理するために複雑なファイル構造を持っており、一部のディレクトリのみをローカル マシンにバックアップしたいと考えています。
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そしてファイルcリストに載っていません。
バックアップ
シェルスクリプトの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そしてファイルcリストに載っていません。
答え2
おそらく、それのようなものを使用できるでしょう。
- コマンドを使用して
find
、興味のあるファイルを検索します。 - これらを実行する
dirname
と、ファイルが保存されているディレクトリ名が印刷されます。 uniq
ディレクトリにリストされるのは以下のものだけです- rsync で結果を反復処理するか、それらをまとめて、rsync が 1 回だけ呼び出されるようにします。
簡単なスクリプト:
for i in $(find . -name 'backup' -type f | xargs dirname | uniq); do
echo "here: $i"
# here goes rsync
done