我正在尝试使用以下命令将某些文件和文件夹 Rsync 到远程服务器:
rsync -rtOzv --partial -e ssh /media/external/Media/ user@serverip:/media/external/Media --exclude-from='/srv/mr/logs/ExcludeList.txt' --log-file=/srv/mr/logs/RSyncLog.txt
包含ExcludeList.txt
以下内容:
testfolder1
test folder 2
test - folder - 3
test [folder4]
testfile1.txt
test file 2.txt
test - file - 3.txt
test [file4].txt
当我运行命令时,test [folder4]
仍然test [file4].txt
被传输到远程文件夹。如何排除名称中包含[
或的文件/文件夹?]
答案1
手册页说
--exclude-from=FILE read exclude patterns from FILE
注意这个词模式。排除列表不只是由文件名组成,还包括模式。尝试使用反斜杠:
test \[folder4\]
答案2
来自rsync 手册页,“包含/排除模式规则”部分:
- '
[
' 引入字符类,例如[a-z]
或[[:alpha:]]
。- 在通配符模式中,反斜杠可用于转义通配符,但当没有通配符时,它会按字面意思匹配。这意味着,与没有通配符的模式相比,当模式包含通配符时,会多一层反斜杠删除。例如,如果您将通配符添加到“
foo\bar
”(与反斜杠匹配),则需要使用“foo\\bar*
”以避免“\b
”变成“b
”。
这意味着[file4]
将被视为与任何单个字符“f”、“i”、“l”、“e”或“4”匹配的模式。要使方括号按字面意思处理,您需要对其进行转义,例如:test \[file4\].txt
。