rsync --exclude-from 'list' 文件不起作用

Jus*_*cer 5 regex unix linux bash rsync

我正在尝试使用 rsync 完成从远程服务器到本地机器的未完成传输

rsync -a user@domain.com:~/source/ /dest/
Run Code Online (Sandbox Code Playgroud)

哪里/dest/是部分完成的转移的位置。然而,由于带宽问题我需要运行的rsync到/tmp_dest/不同的机器上没有副本/dest/,从那里我可以再后来移动/tmp_dest//dest/

到目前为止,我提出的解决方案是使用 rync 的--exclude-from选项,使用包含/dest/.

该命令看起来像这样

rsync -a --exclude-from 'list.txt' user@domain.com:~/source/ /tmp_dest/
Run Code Online (Sandbox Code Playgroud)

在这一点上,我感觉好像我到处寻找解决方案并尝试了我遇到的每个变体。

这包括相对路径和绝对路径 'list.txt'

相对的:

path 1/file 1
path 2/file 2
Run Code Online (Sandbox Code Playgroud)

- 或者 -

绝对:

/absolute/source/path 1/file 1
/absolute/source/path 2/file 2
Run Code Online (Sandbox Code Playgroud)

我已经尝试了上面的包含组合-来明确排除该行(我已经看到人们想要+其他文件的例子)

- /absolute/source/path 1/file 1
- /absolute/source/path 2/file 2
Run Code Online (Sandbox Code Playgroud)

我试过**/在文件路径前面加上前导来纠正相对路径问题

**/path 1/file 1
**/path 2/file 2
Run Code Online (Sandbox Code Playgroud)

我还尝试导航到包含'list'和执行 rsync的目录,以避免出现 rsync 查找的问题

/path/to/the/list/something1/to.exclude
/path/to/the/list/something2/to.exclude
/path/to/the/list/something3/to.exclude
Run Code Online (Sandbox Code Playgroud)

并且毫无疑问地一无所获

我还确保在“列表”文件中使用了正确的换行符。 LF(Unix)换行符。


我尝试'list'使用以下命令创建

find . -type f | tee list.txt
Run Code Online (Sandbox Code Playgroud)

这最初创建了一个看起来像这样的文件

./yyyy-mm-dd folder 1/sub folder [foo]/file.a
./(yyyy) folder 2 {foo2}/file.b
./folder, 3/sub-folder 3/file.c
Run Code Online (Sandbox Code Playgroud)

如您所见,文件路径中有空格和其他字符,但根据我目前的理解,这应该不会影响。但也许我错了,需要转义任何具有特殊含义的字符,然后我可能需要帮助

然后我./在记事本++或其他一些保留LF(Unix)换行符的文本编辑器中执行替换以获得所需的结果。(例如,如上所述,我尝试./什么都不替换,/absolute/path/for/source/注意前导斜杠,甚至双通配符以匹配包含文件的任何父树结构。

我觉得我没有尝试过的唯一一件事是转义文件名和路径中的空格,但我读到这应该不是问题。

也许我忽略了一些东西,任何帮助将不胜感激。

小智 -2

以下是 rsync 手册页中如何使用“--exclude-from”的信息:--exclude-from=FILE 从 FILE 中读取排除模式

使用以下命令: rsync -a --exclude-from=list.txt user@domain.com:~/source/ /tmp_dest/

而且最好使用 list.txt 文件的完整路径名