não é possível extrair o arquivo que foi enviado para o servidor FTP

não é possível extrair o arquivo que foi enviado para o servidor FTP

Sistema de origem:

  • CentOS 7
  • bash shell
  • fecho eclair

Sistema de destino:

  • servidor FTP
  • CentOS 6.4
  • bash shell
  • descompactar

Eu escrevi um script para arquivar o arquivo e enviá-lo para o servidor FTP usando shell script

#!/bin/bash

# Declare no. of days
days=15

# Declare Source path of sql files and Destination path of backup directory
dumps=/home/applications/backup

bkpdir=/home/applications/backup/olddumps

# Find sql dumps of ets
files=($(find $dumps/*.sql -mtime +"$days"))

for file in ${files[*]}

do
# Move each file into backup dir which is 15 days old
echo "file is: $file\n";

mv $file $bkpdir

# Find the sql files and compress them

cd $bkpdir

filename=$(basename $file)

zip $bkpdir/$filename.zip $filename

# FTP Login

HOST=a.b.c.d

USER=xxxx

PASS=yyyyy

REM_DIR=/olddumps/sqlfiles

echo "Uploading file via FTP:"

ftp -in $HOST <<EOF

quote USER $USER

quote PASS $PASS

cd $REM_DIR

put $filename.zip

bye

EOF

# Remove sql files if any
rm $bkpdir/$filename

done

# Remove compressed files which are 6 months old
find $bkpdir/*.zip -type f -mtime +180 -exec rm {} \;

Agora o problema é que o arquivo compactado no sistema de destino não está sendo extraído usando unzipo comando e mostra o seguinte erro:

Arquivo: emt_bus-08-09-16-03-29.sql.zip

caution: zipfile comment truncated
error [emt_bus-08-09-16-03-29.sql.zip]: missing 49666528 bytes in zipfile
(attempting to process anyway)
error [emt_bus-08-09-16-03-29.sql.zip]: start of central directory not found;
zipfile corrupt.
(please check that you have transferred or created the zipfile in the
appropriate BINARY mode and that you have compiled UnZip properly)

Eu costumava tararquivar, mas sem sorte. Não extrai o arquivo no sistema de destino e mostra o seguinte erro

gzip: stdin: invalid compressed data--format violated
emt_bus-08-09-16-03-29.sql
tar: Unexpected EOF in archive
tar: Unexpected EOF in archive
tar: Error is not recoverable: exiting now

Como resolver o problema?

Responder1

Provavelmente você já tem mensagens de erro que simplesmente não vê ao executar esse script.

Capture toda a saída para um log executando-o com
script.sh > log.txt 2>&1

A última parte redireciona stderr para stdout, neste caso log.txt

Provavelmente, o que você descobrirá é que o tempo limite está esgotado (quantos arquivos você está enviando, quão estável é sua conexão) ou talvez um comando que você acha que espera pelo próximo comando, na verdade, não espera no script.

Responder2

Seu script deve ser definido binary(após os quotecomandos). Caso contrário, usará o modo de texto para este script.

Se fosse interativo, o cliente FTP que acabei de testar assumirá o modo binário. Mas não quando não é interativo.

Isto é o que eu testei/e consertei:

#!/bin/sh
ftp -in invisible-island.net <<EOF
quote USER anonymous
quote PASS anonymous
binary
cd cproto
get cproto.tar.gz
bye
EOF

informação relacionada