Rsync 包含特定檔案的所有目錄

Rsync 包含特定檔案的所有目錄

我正在開發一個需要公鑰和密碼的集群,我有一個複雜的文件結構來組織我在這個集群上的工作,我想在我的本地電腦上僅備份一些目錄。

我希望 rsync 僅獲取具有名為“backup”的檔案的目錄。例子:

data/sub1/sub1_1/backup < back up this directory
data/sub1/sub1_2/ < don't back up

由於這個密碼問題,我想避免任何多次呼叫 ssh 的腳本,是否有任何高級過濾器能夠使用 rsync 來做到這一點?

答案1

如果要備份的目錄數量不是太多,您可以使用 bash shell 腳本將它們放入命令列中。以下 shellscript 是一個示範。

目錄結構

$ tree data
data
└── sub1
    ├── sub1_1
    │   ├── a
    │   ├── b
    │   └── backup
    ├── sub1_2
    │   └── c
    └── sub1_3
        ├── backup
        └── d

4 directories, 6 files

Shell腳本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未列出。

備份

n從 shellscript 中的 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和文件C未列出。

答案2

也許你可以使用類似的東西。

  1. 使用該find命令查找您感興趣的文件。
  2. 將它們插入dirname以列印儲存檔案的目錄名稱。
  3. 使用uniq所以目錄只列出
  4. 迭代 rsync 中的結果或將它們放在一起,這樣 rsync 只會被呼叫一次。

簡單的腳本:

for i in $(find . -name 'backup' -type f | xargs dirname | uniq); do
  echo "here: $i"
  # here goes rsync
done

相關內容