Para mim, ainda parece ser um problema de modo ASCII vs. binário, apesar do teste que você fez com seu cliente de desktop. Seu cliente de desktop pode ser mais inteligente que o cliente FTP de linha de comando no servidor de envio (seu servidor local no qual você está executando o script).
Por exemplo, se o servidor local for Windows (que usa CRLFs como finais de linha) e o servidor remoto for Unix (que usa apenas LFs como terminações de linha), e você não estiver especificando o modo binário e seu software FTP não Para detectá-lo automaticamente e fazer a coisa certa, você estará usando o modo ASCII para a transferência, o que deve tirar os CRs de qualquer par CRLF. Se o seu tarball gzipped tiver o padrão de byte 0x0d0a aparecendo nele em qualquer lugar, ele perderá o 0x0d.
Se o cliente de FTP de linha de comando em seu sistema de envio (eu acho que é o seu servidor local) é parecido com o do meu sistema, tudo que você precisa fazer para testar essa teoria é adicionar o comando binary
antes ou depois da linha cd
:
cd $FSBACKDIR
ATTACH='for file in *$DATE.tar.gz; do echo -n -e "put ${file}\n"; done'
ftp -nv <<EOF
open $FTPHOST
user $FTPUSER $FTPPASS
binary
cd $FTPDIR
$ATTACH
quit
EOF
Um último pensamento: Se não for ASCII vs modo binário afinal, eu olharia para ver se talvez o ALG FTP em um gateway NAT entre seu servidor local e remoto (ou entre o servidor remoto e seu desktop) é de alguma forma corrompendo o arquivo em trânsito. Eu suponho que também poderia ser algum outro tipo de proxy entre hosts, não especificamente um ALG FTP do gateway NAT.