На этот вопрос уже есть ответ:
Мне нужно загрузить файл размером около 1 ГБ на онлайн-сервер, чтобы получить его к другу. Теперь, похоже, возникла проблема с моим подключением к Интернету, потому что, если я попытаюсь загрузить файл размером более 20 МБ, он просто перестанет загружаться и по какой-то причине не запустится снова.
Итак, я хотел бы приложение или скрипт (ы) (может потребоваться два, один, который создает файлы, а другой, который их реконструирует), которые могут делать следующее:
Разбивать файл на более мелкие файлы, где максимальный размер для каждого файла может быть установлен пользователем, чтобы его можно было использовать в других случаях
Может восстанавливать файл на другом конце и проверять целостность, проверяя его SHA512SUM
Я бы предпочел это не сжать ничего. Я использую Ubuntu GNOME 16.04.1 с GNOME 3.20. Есть ли способ сделать это?
Я кодировал два маленьких сценария, которые могут использоваться для этого. Во-первых, поместите сценарий (назовите его 'разделителем' или чем-либо, что Вы любите) в отдельной папке с файлом, чтобы быть 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
Проверьте предложенные ответы перед регистрацией. Первый предложенный ответ - этот: Разделение большой файл в меньшие файлы и затем интегрируют их для получения исходного файла
И здесь команд
split -b 20M -d bigfile bigfile-part
cat bigfile-part* > bigfile
Редактирование:
... и для hashsum части, можно генерировать файл контрольной суммы SHA512 из исходного ("большого") файла:
sha512sum bigfile > sha512.txt
После соединения всех мелких деталей снова, проверьте снова с новым файлом и сравните значения.