运行rsync -av`cat / path / to / file` / destination /时在文件路径上转义空格

时间:2018-08-08 06:28:02

标签: macos terminal rsync

我有一个纯文本文件,其中包含一个路径列表(大约120条路径,每行一条),我需要将该路径同步到一个目录中,为此,我正在使用this suggestion

rsync -av `cat /path/to/file` /destination/

问题在于路径包含用\进行转义的空格,因此它们看起来像这样:

/path/to\ some/directory-001/
/path/to\ some/directory-003/
...
/path/to\ some/directory-120/

当我运行上面的命令时,我得到:

rsync: link_stat "/path/to" failed: No such file or directory (2)
rsync: link_stat "/path/to/some/directory-001/" failed: No such file or directory (2)

如果路径中没有空格,它会完美工作。我尝试将路径用双引号,单引号引起来,删除带或不带引号的\。

请告诉我是否有解决办法,我可能在实际命令中缺少某些内容?

谢谢!

1 个答案:

答案 0 :(得分:0)

您可以使用双引号"来使用带空格的文件/目录,例如使用xargs

$ xargs < file -L1 -I {} rsync -av "{}" /destination/

在这种情况下,具有路径的文件将传递到xargs,该文件将被逐行读取-L1,并使用{}作为该行的占位符。

如果您希望并行运行某些程序,则还可以使用选项-P,例如,如果您有4个内核,则可以使用以下代码:

$ xargs < file -P4 -L1 -I {} rsync -av "{}" /destination/

要在源代码上显示完整路径,您可以尝试以下操作:

$ xargs < file -L1 -I {} sh -c "echo $(pwd -P)/{}; rsync -av {} /destination/"