Как разбить файл на множество файлов меньшего размера и затем восстановить их? [дубликат]

Мне нужно загрузить файл размером около 1 ГБ на онлайн-сервер, чтобы получить его к другу. Теперь, похоже, возникла проблема с моим подключением к Интернету, потому что, если я попытаюсь загрузить файл размером более 20 МБ, он просто перестанет загружаться и по какой-то причине не запустится снова.

Итак, я хотел бы приложение или скрипт (ы) (может потребоваться два, один, который создает файлы, а другой, который их реконструирует), которые могут делать следующее:

  • Разбивать файл на более мелкие файлы, где максимальный размер для каждого файла может быть установлен пользователем, чтобы его можно было использовать в других случаях

  • Может восстанавливать файл на другом конце и проверять целостность, проверяя его SHA512SUM

Я бы предпочел это не сжать ничего. Я использую Ubuntu GNOME 16.04.1 с GNOME 3.20. Есть ли способ сделать это?

1
задан 4 August 2016 в 22:04

2 ответа

Я кодировал два маленьких сценария, которые могут использоваться для этого. Во-первых, поместите сценарий (назовите его 'разделителем' или чем-либо, что Вы любите) в отдельной папке с файлом, чтобы быть splitted затем в выполненном ударе:

./splitter FILE SIZE

Быть РЕГИСТРИРУЕТ файл, который будет разделен и ИЗМЕРИТ размер в МБ. После этого Вы будете видеть все splitted блоки (SPLITTED_FILE.aa, SPLITTED_FILE.ab, и так далее...), файл (SPLITTED_CHECK_SHA256SUM) контрольной суммы и файл tar со всеми теми файлами в (SPLITTED_TAR.tar). Удалите все кроме файла tar. Когда необходимо будет отправить его, извлеките его и отправьте отдельные файлы. После того как они прибывают, помещают их снова в файл tar с тем же именем (SPLITTED_TAR.tar) и помещают его в отдельную папку со вторым сценарием ('mergefile' или независимо от того, что Вы называете его). Выполненный:

./mergefile

Это должно извлечь все файлы, объединить их в файле с тем же именем как исходное и проверить sha256sum.

Обратите внимание, что это - очень необработанный сценарий, поэтому просто используйте его точно способ, которым я описал в отдельной папке ни с чем иным в нем. Это - то, если Вы хотите использовать его, думайте, что легче просто сделать это вручную на командной строке.. Но я хотел практиковать некоторый сценарий оболочки!

сценарий разделителя:

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

сценарий 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
2
ответ дан 3 December 2019 в 06:39

Проверьте предложенные ответы перед регистрацией. Первый предложенный ответ - этот: Разделение большой файл в меньшие файлы и затем интегрируют их для получения исходного файла

И здесь команд

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

Редактирование:

... и для hashsum части, можно генерировать файл контрольной суммы SHA512 из исходного ("большого") файла:

sha512sum bigfile > sha512.txt

После соединения всех мелких деталей снова, проверьте снова с новым файлом и сравните значения.

3
ответ дан 3 December 2019 в 06:39

Другие вопросы по тегам:

Похожие вопросы: