我想排除多个目录和子目录及其内容文件。
我想传输(发送)所有文件夹和文件/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 的格式需要是相对目录名格式,而不是绝对格式。我在一些测试目录上尝试了一下,才搞明白。