我知道 rsync 有一个--exclude我经常使用的选项。但是如何指定它应该排除所有“数字”目录?
在下面我列出目录想只有它复制css,html和include
.
..
123414
42344523
345343
2323
css
html
include
Run Code Online (Sandbox Code Playgroud)
通常我的语法是这样的
rsync -avz /local/path/ user@server:/remote/path/ --exclude="cache"
我认为它应该看起来像, --exclude="[0-9]*"但我认为这行不通。
您不能在 rsync 的模式语法中说“仅包含数字的名称”。因此,包括所有包含非数字的名称并排除其余名称。
rsync --include='*[!0-9]*' --exclude='*/' …
Run Code Online (Sandbox Code Playgroud)
另请参阅我的rsync 模式指南。
rsync 的 exclude 选项并不真正支持正则表达式,它更像是一个 shell globbing 模式匹配。
如果这些目录相当静态,您应该将它们列在一个文件中并使用--exclude-from=/full/path/to/file/exclude_directories.txt.
更新以提供示例
首先,您只需将目录放入一个文件中:
find . -type d -regex '.*/[0-9]*$' -print > /tmp/rsync-dir-exlcusions.txt
Run Code Online (Sandbox Code Playgroud)
或者
( cat <<EOT
123414
42344523
345343
2323
EOT ) > /tmp/rsync-directory-exclusions.txt
Run Code Online (Sandbox Code Playgroud)
然后你可以做你的 rsync 工作:
rsync -avHp --exclude-from=/tmp/rsync-directory-exclusions.txt /path/to/source/ /path/to/dest/
Run Code Online (Sandbox Code Playgroud)
您只需要一个额外的步骤来设置包含要排除的目录的文本文件,每行 1 个。
请记住,作业中目录的路径是它们与 rsync 如何查看目录的相对路径。