rsync - 仅当某个文件不存在时才复制目录内容

rsync - 仅当某个文件不存在时才复制目录内容

我们希望将旧服务器的内容迁移到新服务器,但我们不想复制所有内容,而是希望排除任何具有.swf文件在其中。我们知道该--exclude标志,但它只会排除文件,而不是父目录(及其内容),如果有.swf文件

如果使用 rsync 无法完成此操作,那么在这种情况下,我们是否可以使用 bash 脚本将文件从一台服务器复制到另一台服务器?

答案1

您可以生成包含 *.swf 文件的目录列表,然后将该列表转换为 rsync 的排除文件。

例如

find /path/to/topdir/ -iname '*.swf' -printf "%h\n" |
    sort -u |
    sed -e 's/^/- /; s:$:/**:' > rsync-exclude.txt

输出将如下所示,可以与 rsync--exclude-from=FILE选项一起使用:

- /path/to/topdir/directory1/**
- /path/to/topdir/directory2/**
- /path/to/topdir/directory3/**
- /path/to/topdir/directory5/subdir1/**

请注意,rsync 的包含和排除选项可能很难掌握,它们的工作方式与 glob 或正则表达式不同。您需要先练习--dry-run和 ,--verbose直到您得到完全正确的模式。

相关内容