Comando SCP com espaços e uma vírgula

2

tem tido problemas todos os dias com este comando scp único. Foi pesquisando e perguntando às pessoas etc etc.

$ scp -P portNumber /ReferenceFiles/CompanyA,The/Some\ DirectoryWithA\ Space/Game user@server:/ReferenceFiles/CompanyA/Game

Eu tentei fazer um arquivo dentro do diretório, mas o arquivo get não existe, e se eu tentar fazer o comando scp no diretório eu recebo "não um arquivo regular".

Eu tentei usar barras duplas para os espaços, usando aspas simples e duplas. Eu sou muito novo nisso e fui lançado esperando contar essas coisas quando me disseram que eu estaria fazendo principalmente PHP e Flash ...

Qualquer ajuda ou sugestão é bem-vinda.

Obrigado

    
por Relequestual 05.08.2010 / 16:09

5 respostas

1

Uma das maneiras mais fáceis de contornar o personagem que está escapando na linha de comando (se essa é a causa do problema) é usar o preenchimento de tabulação para que ele preencha os caracteres "desajeitados"; dependendo de como seu diretório / ReferenceFiles está cheio, você pode ser capaz de fazer algo como

  scp -P portNumber /Ref<tab>CompanyA<tab>Some<tab>Game/file user@server:...

Como alternativa, você pode usar um? em vez de um caractere, desde que não haja muitos nomes de arquivos / diretórios conflitantes:

 scp -P portNumber /ReferenceFiles/CompanyA,The/Some?DirectoryWithA?Space/Game/file ...

Para diretórios, você precisa usar a opção -r para scp (sua omissão é porque você obteve o erro "não um arquivo regular").

Por último, pode ser que o destino no servidor não exista como digitado, e essa é a origem do erro (e não o arquivo de origem)?

    
por 05.08.2010 / 16:37
1

Escapes de shell padrão devem ser suficientes, incluindo a vírgula:

scp -P portNumber / ReferenceFiles / CompanyA \, O usuário / Some \ DirectoryWithA \ Space / Game @ server: / ReferenceFiles / CompanyA / Game

    
por 05.08.2010 / 16:43
1

Você precisa usar as duas citações \ escape e :

scp -o port=portNumber "/ReferenceFiles/CompanyA,The/Some\ DirectoryWithA\ Space/Game" user@server:/ReferenceFiles/CompanyA/Game

Não me pergunte por que, mas funciona.

    
por 05.08.2010 / 16:54
1

Seu comando funciona para mim; Aquele é realmente o comando que lhe deu problemas, ao contrário de ir para o outro lado? scp não tem problemas com nomes de arquivos locais, mas os nomes de arquivos remotos passam por expansão de shell no lado remoto. Portanto, se você estiver digitando o comando scp em um shell, precisará citar nomes de arquivos remotos duas vezes. Uma maneira fácil de o nome não conter aspas simples é proteger caracteres especiais com \ e, em seguida, colocar aspas simples em torno do argumento, como em

scp -P portNumber user@server:'/ReferenceFiles/CompanyA,The/Some\ DirectoryWithA\ Space/Game' /ReferenceFiles/CompanyA/Game

O mesmo se aplica a rsync , a propósito.

    
por 05.08.2010 / 20:17
0

Assumindo que "Game" é um diretório, para copiar todos os arquivos dentro de um determinado diretório com scp, simplesmente use a opção -r (recursiva) com um diretório como destino. Além disso, o alvo é o nome do pai do jogo no controle remoto, portanto, você pode soltar "Game" do argumento remoto. Além disso, você precisa escapar dessa vírgula.

Por exemplo,

$ scp -r -P portNumber /ReferenceFiles/CompanyA\,The/Some\ DirectoryWithA\ Space/Game user@server:/ReferenceFiles/CompanyA
    
por 05.08.2010 / 17:03

Tags