Quando tento scp um arquivo com uma barra em seu caminho, o caminho é citado para o host local e o último componente do caminho é citado adicionalmente para o host remoto, como scp host:"a/b/'c'" .
, ele falha com
protocol error: filename does not match request
a menos que eu use a -T
opção. No entanto, se qualquer outro componente de caminho for citado, como scp host:"a/'b'/c" .
, ele funcionará. Além disso, se o caminho não for citado para o host local, como scp host:a/b/'c' .
, ele funcionará.
A página man documenta -T
como:
Desative a verificação estrita de nome de arquivo. Por padrão, ao copiar arquivos de um host remoto para um diretório local, o scp verifica se os nomes dos arquivos recebidos correspondem aos solicitados na linha de comando para evitar que a extremidade remota envie arquivos inesperados ou indesejados. Devido às diferenças em como vários sistemas operacionais e shells interpretam caracteres curinga de nome de arquivo, essas verificações podem fazer com que os arquivos desejados sejam rejeitados. Essa opção desativa essas verificações às custas de confiar totalmente que o servidor não enviará nomes de arquivos inesperados.
Não entendo como essa descrição explica o comportamento que vejo. Qual é a razão para o comportamento do scp? E existe alguma maneira de desativar esse "recurso"?
Estou executando o Ubuntu 16.04 e o host remoto está executando o Ubuntu 12.04.