Ter um arquivo txt mantendo suas quebras de linha após o envio via FTP via Curl

1

Estou usando o Curl para enviar um arquivo por FTP. É apenas um arquivo de texto gerado a partir de um comando de cópia impressa na tela. Quando eu catar o arquivo, ele exibe corretamente, parece com isso:

System up for    14844
 1, 0000, R D S, 0, 0, x, 0.00
 2, 0000, R D S, 0, 0, x, 0.00
 3, 0000, R D S, 0, 0, x, 0.00
 4, 0000, R D S, 0, 0, x, 0.00

No entanto, quando olho para o arquivo transferido, tudo está em uma linha. Algum jeito de arrumar isso? Existe uma opção de linha de comando? Este é o meu comando curl:

curl -T ~/hardlog.log ftp://10.0.0.7 --user user:secret

Obrigado

    
por McB 23.07.2013 / 21:59

2 respostas

2

Como já foi mencionado, este é um sintoma clássico de finais de linha incompatíveis. Nesse caso, o sistema de origem é parecido com o Unix (Linux) e o destino é semelhante ao Windows. No Windows, as novas linhas do Unix não são reconhecidas, portanto, o arquivo de texto aparece como uma única linha longa. Nesses casos, você deve fazer uma conversão de nova linha.

Embora o protocolo FTP tenha a conversão de nova linha, o Curl não o suporta, mesmo se forçar a transferência ASCII usando a opção -Q '+TYPE A' .

A opção mais conveniente seria fazer a conversão no Linux antes da transferência usando um script:

#!/bin/sh
SRCFILE=~/hardlog.log
DSTLOGIN=user:secret
DSTURL=ftp://10.0.0.7/              # the URL must end by a slash

unix2dos <"$SRCFILE" | curl -T- "$DSTURL$(basename "$SRCFILE")" -u"$DSTLOGIN"

Se o utilitário unix2dos não estiver disponível em seu sistema, você poderá usar sed 's/$/\r/' ou awk '{printf("%s\r\n",$0)}' . Veja Alternativas para conversão unix2dos .

Outra opção é usar um cliente que suporte transferências ASCII como LFTP . Exemplo:

lftp -e "put -a $HOME/hardlog.log ; exit" -u user,secret 10.0.0.7

Observação: No Windows existem editores de texto capazes de trabalhar com novas linhas do Unix, como o Wordpad , ou de terceiros: Notepad ++ , < em> Notepad2 . Os dois últimos editores também podem ser usados para conversões de nova linha.

    
por 23.07.2013 / 23:05
-1

Aqui está um loop pequeno, mas eficaz, que adiciona uma nova linha ao final de cada linha de texto em um arquivo.

    today='date +%m%d' # file name filter
    for file in *${today}*
    do
      > ${file}.tmp
      while read readline
      do
        echo -e "$readline\n">> ${file}.tmp
      done <${file}
      cp ${file}.tmp ${file}
      rm ${file}.tmp
    done
    
por 10.01.2018 / 16:43