linux - rsync,仅包括某些文件类型,不包括某些目录

标签 linux unix rsync

我只想同步某些文件类型(例如 .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/

相关文章:

python - 如何在 Python 中显示和解析 rsync 进度?

linux - 当我下载 “Pip” 时,出现错误

c++ - gcc 是否有丢弃 -g 标志的选项?

linux - Unix 从管道中的流中剥离 EOF(不是 EOL/空白)

linux - 贝加尔湖需要特定文件夹的写入权限

Rsync:如果校验和相同,则保持目标文件不变

linux + ksh + 向下舍入或向上舍入 - float

linux - 如何在 Linux 中检查第二个列表名称中的文件名?

字符数组到 float 的转换

linux - Rsync - 将源拆分为多组