我有一个纯文本文件,其中包含一个路径列表(大约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)
如果路径中没有空格,它会完美工作。我尝试将路径用双引号,单引号引起来,删除带或不带引号的\。
请告诉我是否有解决办法,我可能在实际命令中缺少某些内容?
谢谢!
答案 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/"