我只想同步某些文件类型(例如 .py
)并且我想排除某些目录(例如 venv
)。
这是我试过的:
rsync -avz --include='*/' --exclude='venv/' --include='*.py' --exclude='*' /tmp/src/ /tmp/dest/
但它不起作用。
我错过了什么?
最佳答案
使用 rsync
,您不需要使用 --include="*.py"
来包含 '*.py'
文件副本。 --include
选项将只包含之前被 --exclude=
排除的文件。 rsync
将 **
指定为通配符说明符。例如,如果你想复制当前目录(和子目录)中的所有 .py
文件,但不复制 venc
目录中的任何内容,你可以执行类似的操作:
rsync -uav --exclude="venc" **.py destination
(注意 -a 表示-rlptgoD
)
这将递归地将当前工作目录中的所有 .py
文件复制到 destination
,不包括 venc
目录。
要从当前路径下的所有目录中递归复制 *.py
文件,不包括任何 venc
目录,您可以使用 的结果构建一个临时文件查找包含
并排除路径中包含*.py
文件的venc/
的文件,然后使用 传输临时文件中的所有文件名>--files-from
和 --no-R
(无相关)选项到 rsync
为:
$ find /path/to -type f -name "*.py" | grep -v 'venc/' > tmpfile \
rsync -uav --no-R --files-from=tmpfile / host:/dest/dir \
rm tmpfile
这将捕获所有子目录中的所有 *.py
文件,不包括所有目录,包括名称 venc/
和它们下面的任何内容。需要 --no-R
选项来防止 tmpfile
中的绝对文件名被视为相对于当前工作目录。
关于linux - rsync,仅包括某些文件类型,不包括某些目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39301182/