我有一个可用的 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>