Pergunta

Periodicamente, eu gosto de colocar arquivos no diretório /tmp do meu servidor da web para compartilhar. O que é irritante é que devo definir as permissões sempre que SCP os arquivos. Seguindo o conselho de outra pergunta Escrevi um script que copia o arquivo, define as permissões e depois imprime o URL:

#!/bin/bash

scp "$1" SERVER:"/var/www/tmp/$1"
ssh SERVER chmod 644 "/var/www/tmp/$1"
echo "URL is: http://SERVER/tmp/$1"

Quando substituo o servidor pelo meu host real, tudo funciona como esperado ... até executar o script por um argumento, incluindo espaços. Embora eu suspeite que a solução possa ser usar $@ ainda não descobri como fazer com que um nome de arquivo espaçado funcione.

Foi útil?

Solução

Acontece que o que é necessário é escapar do caminho que será enviado para o servidor remoto. Bash acha que as cotações no servidor: "/var/www/tmp/$ 1" estão relacionadas aos $ 1 e as remove da saída final. Se eu tentar correr:

tmp-scp.sh Screen\ shot\ 2010-02-18\ at\ 9.38.35\ AM.png

Ecoando, vemos que está tentando executar:

scp SERVER:/var/www/tmp/Screen shot 2010-02-18 at 9.38.35 AM.png

Se as citações forem escapadas literais, o comando SCP se parece mais com o que você esperaria:

scp SERVER:"/var/www/tmp/Screen shot 2010-02-18 at 9.38.35 AM.png"

Com a adição de algum código para truncar o caminho, o script final se torna:

#!/bin/bash

# strip path
filename=${1##*/}
fullpath="$1"

scp "$fullpath" SERVER:\"/var/www/tmp/"$filename"\"
echo SERVER:\"/var/www/tmp/"$filename"\"
ssh SERVER chmod 644 \"/var/www/tmp/"$filename"\"
echo "URL is: http://SERVER/tmp/$filename"

Outras dicas

O script parece certo. Meu palpite é que você precisa citar o nome do arquivo ao passar para o seu script:

scp-chmod.sh "filename with spaces"

Ou escapar dos espaços:

scp-chmod.sh filename\ with\ spaces

A maneira mais fácil sem se preocupar com os espaços nos nomes de arquivos (além de citar) é renomear seus arquivos para se livrar dos espaços antes de transferir. Ou quando você cria os arquivos, não use espaços. Você pode fazer desta sua "prática recomendada" sempre que nomear seus arquivos.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top