Onde o scp colocou esses arquivos?

3

Eu executei um comando scp para baixar alguns arquivos de um servidor SSH. Em vez de usar o . para colocá-lo na pasta atual, digitei acidentalmente * . Parece que o scp copiou os arquivos e os colocou em algum lugar. Meu comando foi semelhante a este:

$moshe> scp [email protected]:~/SomeDirectory/SubDir/* *

Eu quis escrever algo mais assim:

$moshe> scp [email protected]:~/SomeDirectory/SubDir/* .

Onde eles estariam?

    
por Moshe 28.02.2012 / 17:54

3 respostas

4

Seu shell teria expandido o * para todos os arquivos no diretório atual. scp toma vários arquivos de origem e um único caminho de destino (o mesmo que cp ), portanto, terá copiado [email protected]:~/SomeDirectory/Subdir/* e todos os arquivos no diretório atual, exceto o último, até o último. Portanto, supondo que a lista de arquivos no diretório atual não tenha sido alterada, verifique qual diretório está listado por último:

$ ls | tail -1
    
por 28.02.2012 / 18:06
3

Ele os coloca em um subdiretório do diretório atual.

Por exemplo, se o seu diretório atual é algo como:

[andcoz@...] ~/test> ls -F
e  f  r  s  v  w  Z/

Note que Z é um diretório. Quando você escreve:

scp [email protected]:~/SomeDirectory/SubDir/* *

A expansão do shell transformará seu comando em algo como:

scp [email protected]:~/SomeDirectory/SubDir/* e  f  r  s  v  w  Z 

Assim, todos os seus arquivos da máquina remota e todos os arquivos do diretório local serão copiados no diretório Z .

    
por 28.02.2012 / 18:07
0

Se não houver arquivos¹ no diretório atual, scp copiou sucessivamente todos os arquivos remotos em um arquivo chamado * . Em outras palavras, o arquivo ./* agora contém o último arquivo remoto em ordem alfabética. Se algum dos arquivos remotos eram diretórios, scp exibiu uma mensagem de erro, mas continuou copiando.

Se houvesse um único arquivo regular no diretório atual, scp copiava sucessivamente todos os arquivos remotos para aquele arquivo.

Se houver pelo menos duas entradas no diretório atual, o que aconteceu depende do tipo de arquivo da última entrada em ordem alfabética (o último elemento da lista se você executar ls ).

  • Se fosse um arquivo normal, scp foi abortado com o erro "Não é um diretório".
  • Se fosse um diretório, scp copiou todos os arquivos remotos e todos os arquivos no diretório atual, exceto a última entrada no diretório.

Eu recomendo montar diretórios remotos com sshfs ou usando rsync -av ou rsync -auv (sem curingas) para copiar arquivos . scp pode ser propenso a erros às vezes.

¹ Exceto para arquivos cujo nome comece com . .

    
por 29.02.2012 / 02:35