Rsync 排除目录中除特定文件之外的所有文件

Rsync 排除目录中除特定文件之外的所有文件

我试图排除目录 cache/ 中的所有文件(某些特定文件除外)。此外,我想备份源中的所有其他文件。

源目录的内容:

backup-test/
├── cache
│   ├── adodb
│   │   ├── .htaccess
│   │   ├── index.html
│   │   ├── test-adodb-1.html
│   │   ├── test-adodb-2.html
│   │   └── test-adodb-3.html
│   ├── .htaccess
│   ├── test-cache-1.html
│   ├── test-cache-2.html
│   └── test-cache-3.html
├── .htaccess
├── test-root-1.html
├── test-root-2.html
└── test-root-3.html

cache/我想要备份且不应排除的文件:

cache/index.html
cache/adodb/.htaccess

我的命令:

rsync -av --delete \
--include "cache/index.html" \
--include "cache/adodb/.htaccess" \
--exclude "cache/*" \
-e ssh "$SSH_REMOTE":"$BACKUP_SOURCE" "$BACKUP_DEST"

输出:

receiving incremental file list
backup-test/
backup-test/.htaccess
backup-test/test-root-1.html
backup-test/test-root-2.html
backup-test/test-root-3.html
backup-test/cache/

sent 174 bytes  received 431 bytes  1,210.00 bytes/sec
total size is 35  speedup is 0.06

但它并没有像我预期的那样工作。Rsync 仅备份空的缓存/目录,而不备份我包含的文件。我该怎么办?

答案1

我找到了解决方案。我希望这可以帮助您节省太多时间。

首先,您可以创建一个文件(include.txt),该文件将在include-from中使用它,您可以在其中添加以下行并保存它:

+ index.html
+ adodb*
+ adodb/.htaccess
- *

然后,您可以使用此 rsync 命令来备份仅包含 include.txt 中提到的文件并排除所有内容:

引用

rsync -ruvv --rsh=ssh --include-from=include.txt remoteSrv:/cache/$BACKUP_DEST

相关内容