Estou tentando rsync de um servidor para outro. Os servidores têm a mesma estrutura de diretórios, mas estou tendo problemas para fazer com que o servidor de controle remoto reconheça adequadamente o nome do caminho no controle remoto quando houver um espaço nele.
Aqui estão os detalhes
O diretório local é
mnt/xlses/split/v2/name with space
O diretório remoto é
mnt/xlses/split/v2/name with space
Eu tentei de tudo que encontrei, a última tentativa foi
rsync --size-only -avzPe ssh /mnt/xlses/split/v2/name\ with\ space/ [email protected]:/mnt/xlses/split/v2/"name with space"
quando isso é executado, a primeira coisa que informa é que ele está criando um novo diretório
Eu o interrompo e vejo que há um novo diretório
mnt/xlses/split/v2/name
todos os meus arquivos estão nesse diretório
Eu esperava que eles estivessem
mnt/xlses/split/v2/name with space
Experimentar
De
man rsync
:fonte
man rsync
e pesquisando (/s
) por "--protect". Para instalar com o homebrew:brew install homebrew/dupes/rsync
Se não for encontrado, executebrew search rsync
.rsync -Pavuz 'you@host:~/file\ with\ spaces' ./
Isso funciona no bash: escape dos espaços com barra invertida e use aspas:
Ou se você possui o caminho na variável $ remote_path, os espaços podem ser escapados com a substituição:
fonte
-s
opção funciona em qualquer versão moderna do rsync e é projetado para resolver este problemaUse dois pares de aspas
Não se preocupe com todas as barras invertidas, basta usar aspas simples entre aspas duplas :
Você também pode usar o inverso, ou seja, aspas duplas dentro de aspas simples :
Mais informações
Curingas no lado do servidor
Se você deseja que um
*
seja interpretado no servidor e não no cliente, ele*
deve estar dentro de apenas um dos 2 pares de aspas. Acho isso contra-intuitivo, porque logicamente o par externo de aspas escapa à interpretação do cliente, enquanto o par interno de aspas escapa à interpretação do servidor.Proteger Args
A vantagem, comparada à
--protect-args
solução , é que você realmente não possui as restrições do--protect-args
, portanto, pode usar caracteres especiais como~
ou$
. Então você pode escrever:ou
Observe que o til (
~
) no último exemplo precisa estar fora das aspas duplas.Você pode colocar um dos pares de aspas em torno de todo o nome de usuário @ host: parte do arquivo (por exemplo
ssh "[email protected]:'/home/me/test file'" .
)fonte
Entendo que essa é uma pergunta antiga, mas pensei em acrescentar ao corpo de conhecimento existente.
Eu usei
rsync
com várias pastas com espaço e isso funciona. Tenho pastas numeradas de 1 a 10 da seguinte maneira:The\ Folder1
The\ Folder2
The\ Folder3
The\ Folder10
As 2 instâncias que você deseja usar
rsync
são locais e remotas.Local - Observe a falta de cotações.
Remoto - Observe a presença de aspas
fonte
De um modo geral, cite o argumento e escape dos caracteres de espaço no argumento. No exemplo que você deu, tente:
fonte
Das
rsync
páginas de manual:fonte
Bem, eu mesmo vou responder a essa pergunta, embora alguém possa fazer um trabalho melhor para explicá-la.
Evidentemente, a configuração na máquina de destino afeta a maneira como os argumentos são analisados e devemos ter algo que dificulte o uso de aspas ou barras para escapar de espaços, mas podemos usar curingas, então fiz isso
Isso funciona para mim porque existe apenas um diretório que começa com o nome, se eu tivesse vários diretórios, isso não funcionaria.
Por fim, preciso entender como configurar o servidor remoto para que ele possa analisar o nome do caminho com mais eficiência - nunca uso espaços nos nomes de diretório, mas a pessoa que o configurou o fez e, pelo menos por enquanto, estou presa
fonte
Dependendo da situação, uma opção rápida é criar um link simbólico no sistema remoto:
Em seguida, use o
-L
sinalizador norsync
qual ele diz para seguir o conteúdo do diretório:fonte
escape duplo também funciona
fonte
Tente desta maneira:
fonte