Como dividir um arquivo em muitos arquivos menores e depois reconstruí-los? [duplicado]

1

Eu preciso fazer o upload de um arquivo de GB para um servidor on-line para chegar a um amigo. Agora, parece haver um problema com a minha conexão com a internet, porque se eu tentar enviar um arquivo com mais de 20 MB, ele interromperá o upload e não será iniciado novamente por algum motivo.

Então, eu gostaria de um aplicativo ou script (s) (pode haver a necessidade de dois, um que faz os arquivos e um que os reconstrói) que pode fazer o seguinte:

  • Divida o arquivo em arquivos menores, onde o tamanho máximo de cada arquivo pode ser definido pelo usuário, para que isso possa ser usado em outros casos

  • É capaz de reconstruir o arquivo na outra extremidade e verificar a integridade, verificando seu SHA512SUM

Eu preferiria não comprimir nada. Estou executando o Ubuntu GNOME 16.04.1 com o GNOME 3.20. Existe uma maneira de fazer isso?

    
por Byte Commander 19.07.2016 / 19:23

2 respostas

2

Eu codifiquei dois pequenos scripts que podem ser usados para isso. Primeiro, coloque o script (nomeie-o 'splitter' ou qualquer coisa que você queira) em uma pasta separada com o arquivo a ser dividido e, em seguida, na execução do bash:

./splitter FILE SIZE

Sendo FILE o arquivo a ser dividido e SIZE o tamanho em MB. Depois disso, você verá todos os blocos divididos (SPLITTED_FILE.aa, SPLITTED_FILE.ab e assim por diante ...), um arquivo de soma de verificação (SPLITTED_CHECK_SHA256SUM) e um arquivo tar com todos esses arquivos dentro de (SPLITTED_TAR.tar). Exclua todos, exceto o arquivo tar. Quando você precisar enviá-lo, extraia-o e envie os arquivos individuais. Quando eles chegarem, coloque-os novamente em um arquivo tar com o mesmo nome (SPLITTED_TAR.tar) e coloque-o em uma pasta separada com o segundo script ('mergefile' ou qualquer nome que você escolha). Executar:

./mergefile

Ele deve extrair todos os arquivos, mesclá-los em um arquivo com o mesmo nome que o original e verificar o sha256sum.

Note que é um script muito bruto , portanto, use-o exatamente da maneira que descrevi, em uma pasta separada, sem mais nada nele. Se você quiser usá-lo, pense que é mais fácil fazer isso manualmente na linha de comando. Mas eu queria praticar um script de shell!

script splitter:

#!/bin/bash

#Usage: splitter [FILENAME] [SIZE]

PROGRAMNAME=$(basename $0)
PREFIX='SPLITTED_FILE'

if [[ $# != 2 ]]; then
    echo "Usage: $PROGRAMNAME [FILENAME] [SIZE]"
    exit 1
fi

FILENAME=$1
SIZE=$2

if [[ -f $FILENAME ]]; then
    if [[ $SIZE =~ ^[0-9]+$ && $SIZE != 0 ]]; then
        sha256sum $FILENAME > SPLITTED_CHECK_SHA256SUM
        split -b ${SIZE}'M' $FILENAME $PREFIX
        tar -cf SPLITTED_TAR.tar SPLITTED_FILE* SPLITTED_CHECK_SHA256SUM
        echo "Done."
        exit
    else
        echo "$PROGRAMNAME: Invalid size"
        exit 1
    fi
else
    echo "$PROGRAMNAME: Invalid filename"
    exit 1
fi

script mergefile:

#!/bin/bash

#Usage: mergefile

PROGRAMNAME=$(basename $0)
PREFIX='SPLITTED_FILE'

if [[ $# != 0 ]]; then
    echo "Usage: $PROGRAMNAME. No arguments (SPLITTED_TAR.tar will be merged)"
    exit 1
fi

FILENAME=""

if [[ -f 'SPLITTED_TAR.tar' ]]; then
    tar -xf 'SPLITTED_TAR.tar'
    FILENAME=$(cut -f 3 -d " " SPLITTED_CHECK_SHA256SUM)
    cat ./SPLITTED_FILE* > $FILENAME
    if [[ $(sha256sum $FILENAME | cut -f 3 -d " ") == $(cut -f 3 -d " " SPLITTED_CHECK_SHA256SUM) ]]; then
        echo "SHASUM Checks!"
    else
        echo "File corrupted (SHASUM doesn't check!)"
        exit 1
    fi
    echo "Done."
    exit
else
    echo "$PROGRAMNAME: SPLITTED_TAR.tar not found."
    exit 1
fi
    
por IanC 19.07.2016 / 21:16
3

Confira as respostas sugeridas antes de postar. A primeira resposta sugerida é esta: Divida um arquivo grande em arquivos menores e integre-os para obter o arquivo original

E aqui os comandos

split -b 20M -d bigfile bigfile-part
cat bigfile-part* > bigfile

Editar:

... e para a parte de hashsum, você pode gerar um arquivo de soma de verificação SHA512 do arquivo original ("grande"):

sha512sum bigfile > sha512.txt

Depois de juntar todas as partes pequenas novamente, verifique novamente com o novo arquivo e compare os valores.

    
por Julen Larrucea 19.07.2016 / 19:27