我使用rsync从文件/目录名称中包含空格的服务器进行文件传输。使用单引号,我逃避空间,这是有效的
rsync -svaz --progress 'root@192.168.1.2:/folder with space' '/downloads'
我正在尝试为同一个写一个bash脚本但没有成功,根据this线程,可以通过将它放在双引号下来逃避单引号。以下看起来不错
#!/bin/bash
read -e -p "source path: " SOURCEPATH
read -e -p "destination path: " DESPATH
echo "rsync -svaz --progress" "'""$SOURCEPATH""'" "'""$DESPATH""'"
但它不起作用
#!/bin/bash
read -e -p "source path: " SOURCEPATH
read -e -p "destination path: " DESPATH
rsync -svaz --progress "'""$SOURCEPATH""'" "'""$DESPATH""'"
答案 0 :(得分:1)
要在bash中转义空间,您需要使用\
反斜杠后跟空格。
如果您正在阅读其他来源的输入,那么只需输入引号(单引号或双引号)即可。
rsync -svaz --progress "$SOURCEPATH" "$DESPATH"
注意:如果您在阅读输入时已经使用转义字符作为空格,则必须使用双引号。
答案 1 :(得分:0)
你是过分引用的。简单地引用参数扩展可确保精确值,空格和全部作为单个参数传递给rsync
:
rsync -svaz --progress "$SOURCEPATH" "$DESPATH"
原始示例中的单引号未传递给rsync
;在将包含的字符串作为参数传递给rsync
之前,它们将被shell删除。