Como obter contagens dos arquivos presentes no diretório remoto usando o comando sftp

0

Eu tenho um servidor sftp ([email protected]) .Eu estou tentando se conectar ao servidor sftp abaixo e procurar os arquivos que contém .txt em (/ files / base / incomming ) caminho e obter a contagem de linhas em cada arquivo que contém (.txt) .Eu estava tentando alcançar com o comando abaixo, mas o seu lançamento como comando inválido.

  Command:

 echo "wc -l *.txt*"|sftp -q [email protected]:/files/base/incomming

 o/p
 sftp>
 invalid command 

Existe alguma maneira de resolver isso? .

Obrigado antecipadamente.

    
por Rak kundra 27.10.2018 / 20:46

2 respostas

1

Se o número de arquivos não for muito grande, você poderia usar globbing para definir os parâmetros posicionais para cada nome de arquivo correspondente e, em seguida, ecoar a contagem:

count=$(ssh [email protected] 
        'set -- /files/base/incomming/*.txt; echo "$#"')

Ou, se o número de arquivos for grande (mas menor que uintmax_t ), e você tem o GNU find (para a extensão -printf ), então você pode usar um truque que eu vi do Stéphane :

count=$(ssh [email protected] 
        'find /files/base/incomming -maxdepth 1 -type f -name '*.txt' -printf . | wc -c')

O comando acima executa o comando find no diretório fornecido, limitando a profundidade apenas àquele diretório e também limitando as correspondências a arquivos simples ( -type f ) e também cujo nome termina com .txt ; para cada correspondência, um único período é impresso, o número total do qual é contado por wc -c e retornado da substituição do comando para a atribuição a count .

    
por 27.10.2018 / 22:46
3

sftp não bifurca uma concha, então você não pode usar seus comandos habituais lá. Assumindo que você também pode fazer o login através de ssh , você pode usar

ssh [email protected] 'ls /files/base/incomming/*.txt' | wc -l

ou

ssh [email protected] 'ls /files/base/incomming/*.txt | wc -l'

para realizar a tarefa descrita na pergunta.

Se (por qualquer motivo) você quiser usar sftp , você precisa usar um dos comandos disponíveis em ftp (e esperar que o ftpd do outro lado saiba como lidar com curingas):

echo 'ls -l /files/base/incomming/*.txt' | sftp [email protected] | wc -l
    
por 27.10.2018 / 20:57