web-dev-qa-db-fra.com

Comment diviser un fichier en plusieurs fichiers plus petits, puis les reconstruire?

Je dois télécharger un fichier d'environ 1 Go sur un serveur en ligne pour accéder à un ami. Maintenant, il semble y avoir un problème avec ma connexion Internet, car si j'essaie de télécharger un fichier de plus de 20 Mo, il arrête simplement le téléchargement et ne redémarre pas pour une raison quelconque.

Je voudrais donc une application ou un (des) script (s) (il peut y en avoir besoin de deux, un qui fait les fichiers, et un qui les reconstruit) qui peut faire ce qui suit:

  • Fractionner le fichier en fichiers plus petits, où la taille maximale de chaque fichier peut être définie par l'utilisateur afin qu'elle puisse être utilisée dans d'autres cas

  • Est capable de reconstruire le fichier à l'autre extrémité et de vérifier l'intégrité en vérifiant son SHA512SUM

Je préférerais qu'il ne comprime rien. J'utilise Ubuntu GNOME 16.04.1 avec GNOME 3.20. Y-a-t'il une façon de le faire?

1
user364819

J'ai codé deux petits scripts qui peuvent être utilisés pour cela. Tout d'abord, placez le script (nommez-le "séparateur" ou tout ce que vous voulez) dans un dossier séparé avec le fichier à fractionner, puis exécutez bash:

./splitter FILE SIZE

En FILE le fichier à diviser et TAILLEZ la taille en Mo. Après cela, vous verrez tous les blocs fractionnés (SPLITTED_FILE.aa, SPLITTED_FILE.ab, etc.), un fichier de somme de contrôle (SPLITTED_CHECK_SHA256SUM) et un fichier tar avec tous ces fichiers à l'intérieur (SPLITTED_TAR.tar). Supprimez tout sauf le fichier tar. Lorsque vous devez l'envoyer, extrayez-le et envoyez les fichiers individuels. Une fois arrivés, placez-les à nouveau dans un fichier tar du même nom (SPLITTED_TAR.tar) et placez-le dans un dossier séparé avec le deuxième script ("mergefile" ou tout autre nom). Courir:

./mergefile

Il doit extraire tous les fichiers, les fusionner dans un fichier avec le même nom que celui d'origine et vérifier la somme sha256.

Notez que c'est un script très brut, alors utilisez-le exactement comme je l'ai décrit, dans un dossier séparé sans rien d'autre. C'est si vous voulez l'utiliser, pensez il est plus facile de le faire à la main en ligne de commande .. Mais je voulais pratiquer un script Shell!

script de séparation:

#!/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 de fusion:

#!/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
2
IanC

Consultez les réponses suggérées avant de poster. La première réponse suggérée est celle-ci: Fractionner un gros fichier en plus petits fichiers puis les intégrer pour obtenir le fichier d'origine

Et voici les commandes

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

Éditer:

... et pour la partie de hachage, vous pouvez générer un fichier de somme de contrôle SHA512 à partir du fichier d'origine ("gros"):

sha512sum bigfile > sha512.txt

Après avoir remonté toutes les petites pièces, vérifiez à nouveau avec le nouveau fichier et comparez les valeurs.

3
Julen Larrucea