ter rsync manipular arquivos individuais com aspas simples neles

3

Estou sincronizando um diretório que contém vários documentos. Usuários que inserem documentos com todos os tipos de caracteres estranhos em seus nomes de arquivos. Eu preciso sincronizar esses arquivos de um local no Linux para outro. Muitas vezes, apenas um único arquivo precisa ser atualizado. Quando o nome do arquivo contém uma única citação, ele croaks. Eu preciso especificar usuário @ servidor para o destino, caso contrário, funciona. Por exemplo:

rsync --rsh=ssh "zz/joe's change.txt" "/somedir/y/joe's change.txt"

funciona.

rsync --rsh=ssh "zz/joe's change.txt" user@server:"/somedir/y/"

também funciona.

Mas o formulário que desejo usar:

rsync --rsh=ssh "zz/joe's change.txt" user@server:"/somedir/y/joe's change.txt"

falha com:

bash: -c: line 0: unexpected EOF while looking for matching '''
bash: -c: line 1: syntax error: unexpected end of file
rsync: connection unexpectedly closed (0 bytes read so far)
rsync error: error in rsync protocol data stream (code 12) at io.c(165)

Eu poderia usar o segundo formulário (a menos que algum nut coloque um 'no nome do diretório), mas realmente queira usar o terceiro formulário.

    
por Jeff Hutton 03.11.2009 / 01:27

4 respostas

1

Você provavelmente precisa escapar desse personagem. Da página man do bash

A non-quoted backslash (\) is the escape character. It preserves the literal value of the next character that follows, with the exception of <newline>.

    
por 03.11.2009 / 01:47
1

Nesse caso, o que finalmente funcionou para mim foi usar o argumento --protect-args ou -s e, depois, colocar a coisa toda entre aspas da seguinte forma:

rsync -s --rsh=ssh "zz/joe's change.txt" "user@server:/somedir/y/joe's change.txt"

Observe que até mesmo o controle remoto server e user também estão abaixo das aspas.

    
por 21.07.2015 / 15:55
0

Gleb me colocou no caminho certo. Eu tinha tentado escapar dentro das aspas (junto com outras variações de citar e escapar do destino) e isso não funcionou.

Eu já voltei e descobri que funcionaria com o dobro de escape do destino:

rsync --rsh=ssh "zz/joe's change.txt" user@server:/somedir/y/joe\\'s\\ change.txt

ou

rsync --rsh=ssh zz/joe\'s\ change.txt user@server:/somedir/y/joe\\'s\\ change.txt
    
por 03.11.2009 / 11:09
0

Tente:

rsync --rsh=ssh "zz/joe's change.txt" "user@server:/somedir/y/joe's change.txt"

O "é um sinal para o shell e pode não funcionar como parte de um argumento.

    
por 03.11.2009 / 11:13

Tags