rsync 排除文件:正确的语法以排除名称包含空格的特定文件夹

rsync 排除文件:正确的语法以排除名称包含空格的特定文件夹

我在尝试使用 --exclude-from=excludefile.txt 选项从 rsync 命令中排除一些名称包含空格的文件夹时遇到了困难。到目前为止,我尝试过:

"Spaces in Folder Name"
'Spaces in Folder Name'
Spaces in Folder Name


"(fullpath)/Spaces in Folder Name"
'(fullpath)/Spaces in Folder Name'
(fullpath)/Spaces in Folder Name

and

"./Spaces in Folder Name"
'./Spaces in Folder Name'
./Spaces in Folder Name

但这些都不起作用。有什么想法吗?

答案1

有一个部分叫做高级用法在里面rsync手册页其中写道:

高级用法

旧版本rsync要求在中使用引号空格SRC,如以下示例:

rsync -av host:'dir1/file1 dir2/file2' /dest
rsync host::'modname/dir1/file1 modname/dir2/file2' /dest

这种分词在最新的 rsync 中仍然有效(默认),但不如第一种方法那么容易使用。

如果您需要传输包含空格的文件名,您可以指定--protect-args( -s) 选项,或者您需要以远程 shell 可以理解的方式转义空格。例如:

rsync -av host:'file\ name\ with\ spaces' /dest

所以我认为您只需要使用-s命令行选项。

另一种方法是以某种方式在每个空格前面添加一个反斜杠,我认为这会更难做到。另外,如果您不需要此高级功能,那么就-s足够了。

此外,该模式预计包含斜线和星号,如下所示:

# Matches the folder itself
Spaces in Folder Name
# Matches the sub-files directly inside the folder
Spaces in Folder Name/*
# Matches any file at any level found under folder
Spaces in Folder Name/**

# Or: matches the folder and any file under folder
Spaces in Folder Name/***

因此,您可能对最后一个感兴趣(请注意,它是在 2.6.7 版本中引入的,因此如果您有一个旧版本,那么普通名称 + 带有/和两个的名称**就适合您)。

答案2

我已设法通过使用以下语法来纠正它:

空间\ 在\ 文件夹\ 名称*

路径与“目标文件夹”相关,空格用反斜杠转义,并且必须在末尾放置一个神秘的星号。

相关内容