2016-04-27 64 views
1

我正在尝试编写一个脚本,通过ssh将我的音乐从我的电脑发送到我的android手机,但我遇到了一些困难。下面是一段代码:检查一个文件是否存在于远程服务器上,路径中有空格

while read SONG 
do 
    echo $SONG 
    ssh -qi ~/.ssh/key [email protected]$ip [[ -f "/sdcard/Music/${SONG}" ]] && echo "File exists" || echo "File does not exist" 
done < ~/.mpd/playlists/Blues.m3u 

目的是检查歌已经在手机,如果它不是,我会使用scp它(如果它的存在,它是不是在相同的相对路径.m3u文件)。

我总是得到sh:语法错误:'Davis/Lost'意外的操作符/操作数,我认为这是因为在戴维斯之前有一个空间,我无法逃脱 (第一个$ SONG是Geater Davis/Lost灵魂文/凄婉的遮阳Blue.mp3)

我也试过这样,相同的结果

while read SONG 
do 
    echo $SONG 
    SONG="/sdcard/Music/$SONG" 
    echo $SONG 

    ssh -qi ~/.ssh/key [email protected]$1 [[ -f "$SONG" ]] && echo "File exists" || echo "File does not exist" 
done < ~/.mpd/playlists/Blues.m3u 

想法表示欢迎!

回答

2

ssh命令只接受一个参数作为一个命令,如手册页的概要描述:

SYNOPSIS 
    ssh [...] [[email protected]]hostname [command] 

你需要与坚持,如果你想正确的结果。良好的开端是把整个命令到引号(逃逸的任何内部引号),这样的:

ssh -qi ~/.ssh/key [email protected]$1 "[[ -f \"$SONG\" ]] && echo \"File exists\" || echo \"File does not exist\"" 

应该解决您的问题。

+0

感谢它的工作! 其实 ssh -qi〜/ .ssh/key root @ $ 1“[[-f \”$ SONG \“]]”&& echo“File exists”||回声“文件不存在” 也是正确的,它在客户端而不是服务器上回响。 但ssh似乎停止循环,所以我只有第一行blues.m3u –

+0

这回答:http://stackoverflow.com/questions/9393038/ssh-breaks-out-of-while-loop-in -bash –

相关问题