Estou procurando uma maneira curta e fácil de verificar se um caminho remoto aponta para um diretório (ou um diretório com link simbólico) ou para um arquivo legível.
Se for um diretório, posso scp
vários arquivos específicos de dentro desse diretório para o meu sistema local, enquanto se for um arquivo, posso apenas scp
esse arquivo.
Eu tenho o caminho do arquivo fornecido scp
-manner como user@host:/path/to/dir-or-file
.
Nota: No sistema local (MobaXterm no Windows) eu tenho bash
, scp
e ssh
disponível, enquanto o sistema remoto (no qual o caminho está localizado) é uma distribuição Linux completa.
Você deseja transferir o arquivo (se for um arquivo) ou partes do diretório (se for um diretório).
Se
scp
for solicitado a transferir um diretório sem sua-r
opção, ele falhará. Você pode usar isso para detectar se o caminho fornecido no host remoto é um diretório ou não e, em seguida, invocarscp
uma segunda vez para obter arquivos específicos dentro do diretório se o primeiroscp
não puder obter o nome do caminho como um arquivo.Claro, se você quiser transferir todo o diretório (se for um diretório), basta fazer
que funcionaria independentemente de o caminho ser para um diretório ou arquivo.
Você pode executar o seguinte comando:
O resultado estará entre os tipos de arquivo possíveis:
Nota: se você só precisa testar o diretório ou não dentro de um script de shell bash, você pode simplesmente usar test como:
Uma abordagem rápida e suja, se você não se importa com uma mensagem de erro e só precisa copiar arquivos sem ponto, é isso
O ponto final copia os arquivos remotos para o diretório atual. Ajuste a gosto. O
-p
sinalizador retém o carimbo de data/hora e as permissões. Omita se não forem necessários.Esta informação também está disponível na saída de ls: o primeiro símbolo na primeira coluna é: "d" para diretório "l" para links