Rsync 不会排除文件/文件夹名称中带有“[”或“]”的文件或文件夹

Rsync 不会排除文件/文件夹名称中带有“[”或“]”的文件或文件夹

我正在尝试使用以下命令将某些文件和文件夹 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

相关内容