如何 rsync 排除目录和子目录多个

如何 rsync 排除目录和子目录多个

我想排除多个目录和子目录及其内容文件。

我想传输(发送)所有文件夹和文件/home/admin/web/domain.com/public_html

但想要排除这些目录及其子目录的所有文件。它们有一些随机的目录名

/home/admin/web/domain.com/public_html/admin/data/engine/storage
/home/admin/web/domain.com/public_html/admin/smarty/cache
/home/admin/web/domain.com/public_html/admin/data/conversion
/home/admin/web/domain.com/public_html/contents/
/home/admin/web/domain.com/public_html/contents/548/
/home/admin/web/domain.com/public_html/contents/8fd63uu47/
/home/admin/web/domain.com/public_html/contents/95ued/

我尝试了两种方法:

rsync -avPh /home/admin/web/domain.com/public_html --exclude={'backup/*/*','conversion/*/*','smarty/cache/*/*','storage/*/*','contents/*/*'} [email protected]:/home/ubuntu

和:

rsync -avPh /home/admin/web/domainn.com/public_html --exclude={'/backup/*','/conversion/*','/cache/*','/storage/*/*','/contents/*'} [email protected]:/home/ubuntu

答案1

您可以尝试这个命令吗?

rsync -avPh /home/admin/web/domain.com/public_html --exclude={'admin/data/conversion', 'admin/smarty/cache', 'contents'} [email protected]:/home/ubuntu

答案2

将“我做了什么”应用到“如果我是你我会做什么”

cd /home/admin/web/domain.com/public_html
find . "$DIR" -type d > exclude_list.txt

获取所有底层目录的完整递归列表。为什么?find?因为它并不像ls看上去那么笨重。

然后编辑exclude_list.txt文件,使得每行都有相对目录名称,并转储您想要备份的目录名称。

(脑筋急转弯是exclude_list列出了要跳过的目录,所以在这里看到它意味着你不会在那里看到它,而相反的逻辑或条件的水平让我头疼,然后爆炸。如果你注释掉一行 - 跳过它不被排除 - 情况会变得更糟 - 所以注释掉一行会在备份中包含该行的目录rsync,但我离题了。<清理散落的灰质......>)

admin/data/engine/storage
admin/smarty/cache
admin/data/conversion
contents/
contents/548/
contents/8fd63uu47/
contents/95ued/
etc…

可能还有其他路径。要运行的脚本已chmod被执行,如下所示

#!/bin/bash
rsync -vra --exclude-from='exclude-file.txt' 'source_dir' 'dest_dir'

开关用于

-v verbose
-r recursive, -a supposedly implies and includes this too
-a which includes the -r switch and others as well

让我困惑的是,exclude_file 的格式需要是相对目录名格式,而不是绝对格式。我在一些测试目录上尝试了一下,才搞明白。

相关内容