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 文件的完整路径名