Gordon,
> Date: Sat, 20 Feb 2016 16:40:01 -0800
> From: Gordon Messmer <gordon.messmer(a)gmail.com>
> To: Community support for Fedora users <users(a)lists.fedoraproject.org>
> Subject: Re: Bash / Escaping quotes is driving me crazy . .
> Message-ID: <56C90761.4070509(a)gmail.com>
> Content-Type: text/plain; charset=utf-8; format=flowed
>
> On 02/20/2016 04:05 PM, Philip Rhoades wrote:
>> . . but why is there only a problem with the "flac" OR? - all three
>> files have at least one space in the filename:
>
> Your mistake seems to be believing that the shell can understand the
> way
> you're nesting quotes. It can't. Each unescaped quote you're using
> simply terminates the quoted string that preceded it. So your example:
>
> ssh localhost "find
> /home/phil/music/ambient/RobertGass+OnWingsOfSong/OmNamahaShivaya
> -maxdepth 1 -type f \\( -name "*.mp3" -o -name "*.m4a" -o -name
> "*.flac"
> \\)"
>
> There are the following quoted strings:
>
> "find /home/phil/music/ambient/RobertGass+OnWingsOfSong/OmNamahaShivaya
> -maxdepth 1 -type f \\( -name "
> " -o -name "
> " -o -name "
> " \\)"
>
> This means two things: First, the wildcards are unquoted when the
> command is run on the remote system. Second, the wildcards are also
> unquoted on the local system. So, if there are any mp3, m4a, or flac
> files in the directory where you run that command, or in the default
> login directory on the remote system, the wildcard will be expanded and
> find will only search for files with that specific name.
>
> Instead, use single quotes around the entire command, or escape both
> the
> quotes and the wildcards.
>
> ssh localhost "find
> /home/phil/music/ambient/RobertGass+OnWingsOfSong/OmNamahaShivaya
> -maxdepth 1 -type f \\( -name \"\*.mp3\" -o -name \"\*.m4a\" -o -name
> \"\*.flac\" \\)"
>
> ssh localhost 'find
> /home/phil/music/ambient/RobertGass+OnWingsOfSong/OmNamahaShivaya
> -maxdepth 1 -type f \( -name "*.mp3" -o -name "*.m4a" -o -name "*.flac"
> \)'
OK, that all makes sense but there is a further issue - I was trying to
keep it simple - this whole line is inside a Ruby "system" command ie:
system( "ssh .. " )
- so my working version is the same as your first option (without the
escaped '*'s) but with an extra '\' at each place. I can't use the
second option because I need to use double quotes so that I can use Ruby
variables inside the double quotes eg:
#{path}
Thanks for the explanation!
Regards,
Phil.
--
Philip Rhoades
PO Box 896
Cowra NSW 2794
Australia
E-mail: phil(a)pricom.com.au