Как уже упоминалось, это классический признак несовместимых окончаний строк. В этом случае исходная система похожа на Unix (Linux), а назначение - на Windows. В Windows новые строки Unix не распознаются, поэтому текстовый файл отображается в виде одной длинной строки. В таких случаях вы должны сделать перевод новой строки.
Хотя протокол FTP имеет преобразование новой строки, встроенный Curl не поддерживает его, даже если форсировать передачу ASCII с помощью опции -Q '+TYPE A'
.
Наиболее удобным вариантом было бы сделать преобразование в Linux перед передачей, используя скрипт:
#!/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"
Если утилита unix2dos
недоступна в вашей системе, вы можете использовать вместо нее sed 's/$/\r/'
или awk '{printf("%s\r\n",$0)}'
. Смотрите Альтернативы конвертации в unix2dos .
Другим вариантом является использование клиента, поддерживающего передачу ASCII, например LFTP. Пример:
lftp -e "put -a $HOME/hardlog.log ; exit" -u user,secret 10.0.0.7
Примечание. В Windows есть текстовые редакторы, способные работать с новыми строками Unix, такими как Wordpad или некоторые сторонние: Notepad++, Notepad2. Последние два редактора также могут быть использованы для преобразования новой строки.