我可以在一个 rsync 过滤规则文件中每行检查多个文件扩展名吗?

我可以在一个 rsync 过滤规则文件中每行检查多个文件扩展名吗?

我有一个可用的 rsync 脚本,它以递归方式遍历我们的目录结构并为.publish每个目录加载一个文件。每个文件都包含要发布的文件列表。发布意味着将文件从内部的、非完全开源的 git 存储库复制到完整的开源存储库。然后将目标文件夹(称为导出)推送到 GitHub。之所以选择这种方式,是因为要么我们没有发布文件的所有权限,要么有些文件在公开之前需要重新制作 :)。

文件.publish如下所示:

# git files
.gitempty

# Documentation
README.md

# Package
sync.pkg.vhdl

# Clock-Domain-Crossing (CDC) circuits
sync_Bits.files
sync_Bits.vhdl
sync_Reset.files
sync_Reset.vhdl
sync_Strobe.files
sync_Strobe.vhdl
sync_Vector.files
sync_Vector.vhdl
sync_Command.files
sync_Command.vhdl

# Altera specific implementations
sync_Bits_Altera.vhdl
sync_Reset_Altera.vhdl

# Xilinx specific implementations
sync_Bits_Xilinx.vhdl
sync_Reset_Xilinx.vhdl

我正在寻找一种将*.vhdl*.files行合并为一行的可能性,方法是使用类似以下内容:(sync_Command\.(vhdl|files)正则表达式语法)。

我搜索了rsync 手册页,但我只找到了*通配符,这似乎有点太笼统了。

每行可以指定多个文件扩展名吗?

这是我的 rsync 命令行:

rsyncOptions=( \
    --archive \
    --itemize-changes \
    --human-readable \
    --verbose \
    '--filter=:en+ .publish' \
    '--filter=- *' \
    '--filter=P .git' \
    '--filter=P .gitmodules' \
    '--filter=P lib/*' \
    --delete --delete-excluded --prune-empty-dirs \
    --stats)
rsync "${rsyncOptions[@]}" "$src/" "$dst/"

答案1

是的,您只需将它们标记为包含选项(您可以拥有任意数量的选项),即:

rsync -rvzPm --include="*/" --include="*.doc" --include="*.docx" --include="*.pdf" --exclude="*" <srcDir>/ <targetDir>

相关内容