Показаны сообщения с ярлыком разбить файлы. Показать все сообщения
Показаны сообщения с ярлыком разбить файлы. Показать все сообщения

четверг, 4 января 2024 г.

Использование split без ввода в терминале команды с параметрами

Терминальную команду split можно использовать более удобным образом для пользовательского применения. Для этого заранее создаётся два сценария (скрипта bash), которые и обеспечивают желаемый процесс, а также кнопка запуска, собственно и запускающая процесс. Публикация описывает создание инструмента для личных нужд. Вдруг кому и пригодится. 🙏

1. Создание сценария (исполняемого файла sh), который запишет число частей, на которые необходимо разбить исходный файл. Например: 

#!/bin/bash
zenity --width=200 --title "Количество частей" --text="На сколько частей разбить файл:" --entry > /tmp/parts.txt
exit

--title "..." и --text="..." можно указать свои. В рассматриваемом примере результат будет таким:


Введённое значение будет записано в файл /tmp/parts.txt

2. Сценарий выполнения команды split сначала запросит местоположение файлы, который необходимо разбить на части, а затем разобьёт его на указанное в п.1 количество частей. Количество частей будет введено из ранее созданного файла /tmp/parts.txt  Чтобы в процессе выполнения команды split окно терминала не было пустым, то в него добавлен поясняющий текст.

#!/bin/bash
file=$(zenity --file-selection)
/home/minter/Tools/scripts/modules/what-parts.sh
echo " "
echo " "
echo "     Результат в виде файлов с именем x..."
echo "     будет размещён в домашнем каталоге."
echo " "
echo "     После завершения процесса окно"
echo "     терминала закроется автоматически."
echo " "
echo " "
split "$file" -x -n$(cat /tmp/parts.txt) -a2
exit

В приведенном примере /home/minter/Tools/scripts/modules/what-parts.sh является сценарием, который указан в п.1 (см. выше). Результат:


Сценарий также оформляется как исполняемый файл sh

3. Другая реализация изложенного выше подразумевает использование только одного файла sh, например, split.sh , но работа которого более наглядна и удобна для пользователя.

#!/bin/bash
zenity --file-selection > /tmp/filename.txt
file=`cat /tmp/filename.txt`
zenity --width=180 --height=50 --question --timeout=10 --title="Запрос" --text="На сколько частей\nразбить файл ?$task" \
--ok-label="2 и больше" \
--cancel-label="Отмена"
answer=$?
if [ "$answer" -eq 0 ]; then
    zenity --width=50 --height=330 --list --title="Разрезать файл" --checklist --editable --column=" на сколько " --column " частей " --text= "" "2" "" "3" "" "4" "" "5" "" "6" "" "7" "" "8" "" "9" "" "10" > /tmp/parts.txt
elif [ "$answer" -eq 1 ]; then
    > /tmp/parts.txt
elif [ "$answer" -eq 5 ]; then
    > /tmp/parts.txt
fi
if [ -s /tmp/parts.txt ]; then
    echo " "
    echo " "
    echo "     Результат в виде файлов с именем x..."
    echo "     будет размещён в домашней папке."
    echo " "
    echo "     После завершения процесса окно"
    echo "     терминала закроется автоматически."
    echo " "
    echo " "
    split "$file" -x -n$(cat /tmp/parts.txt) -a2
    sleep 3
  else
    echo " "
    echo " "
    echo "     Не указано количество частей."
    echo "     Повторите, указав количество частей."
    echo " "
    sleep 5
fi 
exit

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


В данной форме указано 9 вариантов: от 2 до 10. Если необходимо больше, то измените строку --text= путём добавления "" "11" "" "12" и т. д. Также, запуская сценарий, подберите значение по вертикали  --height=330 В противном случае у вас справа будет отображаться вертикальная полоса прокрутки, что на мой взгляд, не совсем удобно.

Если ничего не введено, то есть нажата кнопка закрытия окна или "Отменить", то файл указания частей /tmp/parts.txt создаётся пустым, то есть не содержащим какой-либо цифры. Далее идёт проверка данного файла на "пустоту" и если он будет признан "пустым", то у вас появится сообщение о невозможности выполнить запрошенную операцию.


4. Кнопка запуска для сценария выполнения команды split сначала создаётся на рабочем столе через правое контекстное меню мыши "Создать значок запуска" (xfce) или "Создать кнопку запуска" (Cinnamon). Созданный файл представляет из себя запускаемый файл .desktop, который в xfce необходимо переместить в скрытый каталог ~/.local/share/applications (домашней папки). В Cinnamon при создании такого файла система сразу же предлагает создать такой файл в указанном месте. Содержание файла (пример):

[Desktop Entry]
Version=1.0
Type=Application
Name=Split
Comment=
Exec=/home/minter/Tools/scripts/modules/split.sh
Icon=partitionmanager
Path=
Terminal=true
StartupNotify=false

По умолчанию, созданная кнопка будет расположена в категории Прочее/Разное. Если имеется необходимость, чтобы она отображалась в категории "Инструменты", то в конец файла добавьте строку, например,

Categories=Utility;

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

Name[ru]=Разрезать файл

Icon= указывает на значок, под которым созданная кнопка будет отображаться. В поле Comment= добавить поясняющий текст для чего это нужно и "с чем его едят" 😁.

При тестовом запуске созданной кнопки и указания числа частей 30 при резке файла размером в 4,3 ГБ сначала были созданы файлы x00 ... x09. Затем были созданы файлы x0a, x0b, x0c, x0d, x0e, x0f  Впоследствии создавались файлы с именами x10 ... x19, а за ними – x1a, x1b, x1c, x1d

пятница, 10 марта 2023 г.

Загрузка большого файла на облако с ограничением размера на загружаемый файл

Для своих нужд возникла задача сохранить на облаке Диск.Яндекс в коллекции файл размером в 4,3 ГБ. Так как Диск.Яндекс не позволяет загружать в бесплатном аккаунте файлы размером более 1 ГБ, то было принято решение сохранить его в облаке в виде файла разбитого на части.

Итак, файл кино C 8 марта мужчины.mkv ‒ 4,3 GiB (4 598 910 123 байта). Учитывая изложенное выше, его необходимо разбить на 5 частей. Вариант с созданием многотомного архива 7z был признан "нерентабельным" в плане нагрузки на процессор. Поскольку на моём компьютере графическая программа gnome-split уже давно "вылетает" на этапе разбиения файла, то было принято решение разбить файл командой split, запускаемой через терминал.

Чтобы не мучиться с экранированием в команде путей, содержащих пробелы, файл был переименован таким образом, чтобы в его имени пробелы отсутствовали, например, C.8.марта.мужчины.mkv (можно было и C_8_марта_мужчины.mkv или C-8-марта-мужчины.mkv).

В команде создания выходного файла указывается суффикс длиной в 1 символ. 

split /home/user/Загрузки/C.8.марта.мужчины.mkv /home/user/Загрузки/C.8.марта.мужчины.mkv_ -x -n5 -a1

Вместо user используйте имя папки своей учётной записи.
-n5 означает, что разбить нужно на 5 частей.
-a1 означает, то каждая часть разбитого файла идентифицируется суффиксом вида _цифра.

В результате исходный файл был разбит на 5 частей, размер каждой из которых составил  877,2 MiB (919 782 024 байта):
C.8.марта.мужчины.mkv_0
C.8.марта.мужчины.mkv_1
C.8.марта.мужчины.mkv_2
C.8.марта.мужчины.mkv_3
C.8.марта.мужчины.mkv_4

Чтобы склеить файлы обратно в данном примере будет использована команда (в одну строку):

cat /home/user/Join/C.8.марта.мужчины.mkv_* > /home/user/Join/C.8.марта.мужчины.mkv && rm /home/user/Join/C.8.марта.мужчины.mkv_*

После её выполнения исходные части, из которых был собран результирующий файл, будут удалены (часть команды ‒ && rm /home/minter/Join/C.8.марта.мужчины.mkv_*).

Про применение команды split на русском языке можно прочитать здесь.

понедельник, 24 сентября 2018 г.

Не запускается linux версия hjsplit

В процессе обмена данными с респондентом, у которого установлена ОС Windows, возникла необходимость передачи ему файлов больших размеров (3 Гб и более).

Так как в силу своей пропускной способности мой канал Интернет зачастую не обеспечивает передачу данных такого размера за 1 сеанс, было принято решение передавать такой контент разбитым на части.

Наиболее удобным ПО для разбивки/склейки, одинаково хорошо функционирующим на Windows и Linux, является утилита HJSplit от Freebyte.com

Однако при очередном обращении к linux версии данного ПО было отмечено, что компьютер на запуск этой программы никак не реагирует. При запуске через терминал видно, что

error while loading shared libraries: libgtk-x11-2.0.so.0: cannot open shared object file: No such file or directory

При этом выяснение наличия в системе libgtk-x11-2.0.so.0 показало, что такая библиотека присутствует, но более новой версии. Очевидно было предположить, что с данной новой библиотекой linux версия hjsplit работать не в состоянии.

Выход: скачайте HJSplit для Windows и запустите его через wine. В этом случае программа полностью функциональна после своего запуска (проверено на Linux Mint 18.3 с wine 1.62 и Linux Mint 19 c winehq 3.16).


Обратите внимание на заголовок:

HjSplit for Windows XP, 7, Vista, 200x, NT, 9x, ME, Linux/wine

понедельник, 6 июня 2016 г.

Разрезать и склеить файл в Linux без терминала. Split и Join с GUI


Необходимость в использовании инструментов разрезания и склейки файлов в Linux у меня ранее не возникало. Для передачи больших файлов с целью обмена мной успешно использовались файлообменные ресурсы, например, те же depositfiles или filefactory, предоставляющие время хранения не менее 90 суток. В связи с тем, что depositfiles предоставил свой менеджер файлов, с помощью которого успешно осуществлялась операция Upload, этот ресурс и использовался чаще всего.

Радикальным образом ситуация изменилась буквально за последние 2 дня. Загруженный мной для обмена файл был в течение дня удалён. Так как администрация этого сервиса вправе удалить любой файл без объяснения причин, то пришлось вернуться к широко использовавшемуся мной ранее файлообменнику Sendspace. А так как этот ресурс позволяет передать файлы не более 300 Мб, то у меня возникла проблема передачи файлов размером в 1,5 Гб.

Другой возможной необходимостью разбить и склеить файл является принципиальная невозможность записать на флэшку с файловой системой FAT32 файл размером более 4 Гб, что обусловлено свойствами самой файловой системы FAT32.

Поиск способов в Linux привёл в инструкции:

Разбить на кусочки по 10 Гб, можно такой командой:

split -b 10G big_file.ext
при этом имена файлов будут типа: xaa, xab, xac..

Далее копируем их к себе

Склеиваем в Linux:

cat xaa xab xac > big_file.ext

Склеиваем в Windows:
copy /B xaa+xab+xac big_file.ext

При всём уважении к терминалу хотелось бы чего-то более привычного, тем более, что мои респонденты, несмотря на их работу в Linux, вряд ли были бы в восторге от необходимости склеивать переданные им файлы в терминале.

📘    Примечание 2024 г. Вы можете воспользоваться сценариями на bash для разрезания и для склейки файлов, созданными мной для личных нужд.

Поискав в центре приложений своего Linux Mint по запросу в строке поиска  split  было найдено 2 варианта решения проблемы.

1 вариант – Gmone Split



Так как в Linux Mint ПО унифицировано для различных оболочек, то данное ПО присутствует и для Cinnamon, и для MATE и XFCE. Естественно, что данное ПО должно быть установлено как у Вас, так и тех, кому Вы будете передавать обработанные этим ПО файлы. После установки в меню программ появляется отображение, например,


При запуске программы отображается мастер (другими словами – Wizard), который будет "руководить" Вашими дальнейшими действиями.


Split a file – разрезать файл

Merge several files – склеить несколько файлов

Слева отображается полное меню, в котором выполняемая операция подсвечивается выделением:


В нижней части справа отображены кнопки дальнейших действий.




Если действие указано, то кнопка "Продолжить" становится активной. Если нажать "Отмена", то доступно главное окно программы, до этого "прикрытое" мастером.


В окне выбора файлов укажите файл, а затем способ его разбиения:



По умолчанию предлагается указать, на сколько частей разбивать выбранный файл. При этом размер каждого фрагмента будет определён программой самостоятельно. Но если нажать на стрелочку справа, то отобразятся и другие варианты:


В поле слева необходимо указать количество этих самых частей или размер в байтах, Кб, Мб, Гб и т.д.


Далее предлагается выбрать рабочий алгоритм:



Признаться откровенно, мной был испробован вариант только "Общий". Про назначение других вариантов ничего не могу сказать.

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


Процесс разбиения файла отображается в графическом режиме:


На выходе Вы получите необходимое количество фрагментов файла с расширениями .001, .002, .003 ...

Процесс склейки производится аналогично. Выбрать операцию "Merge several files" и указать файл с расширением .001



На выходе получится склеенный файл.

2 вариант – HJSplit


Этот вариант найден со ссылки от консольной утилиты LXSplit, в описании которой указано на её совместимость с программной HJSplit


Утилита HJSplit мне была знакома ещё со времён пользования Windows. Официальный сайт этой программы – http://hjsplit.org, а автором является компания freebyte, на сайте которой можно найти полезное для пользователей Windows бесплатное ПО.


Само собой разумеется, что Ваши респонденты также должны установить у себя такую же программу.

📗    Примечание 2024 г. На указанном сайте это ПО уже давно отсутствует. Но Вы можете скачать его отсюда. Запускать необходимо через wine.

Пользователи Linux обращаются к секции Линукса и скачивают архив hjsplitlx.tar.gz  В составе архива имеется сама программа и описание в виде файла txt "что это такое и с чем его едят".


Собственно программой является файл hjsplit. Проверьте, имеется ли у Вас указание на необходимость запуска этого файла как программы:


Интерфейс интуитивно понятен. Split – разрезать, Join – склеить. Сравнением (Compare) и контрольными суммами (Checksum) Вы вряд ли будете заниматься.


Нажимаете "Split", указываете файл, размер каждого фрагмента и нажимаете кнопку "Start".




Процесс отображается графическим индикатором, а по завершении выводится информационное сообщение.



Процесс склейки производится аналогично. Запускается программа, выбирается "Join", указывается файл с расширением .001 и нажимается кнопка "Start".


3 вариант – File Splitter and Joiner (TFSplit-Java)

File Splitter and Joiner поможет разделить большой файл на несколько частей меньшего размера (минимальный 8Кб), а затем объединить их в новый файл идентичный исходному. Поддерживается работа с файлами всех форматов и практически любого размера, файл разделяется по заданному размеру (Гб/Мб/Кб) или по количеству частей (размер частей будет вычислен автоматически).


Для разрезания файлов следует нажать "Split", для склейки – "Join".


File – имя файла, который необходимо разбить (разрезать) на части.

No. Of Parts – число частей (размер каждой части задаётся автоматически).

Max File Size – максимальный размер части разбиваемого файла (справа Гб, Мб или Кб).

Части обработанного файла имеют расширения *1.split, *2.split и так далее.


Для склейки частей в исходный файл необходимо указать только первый файл (*1.split) в папке с остальными частями. Если поставить галочку в поле "Delete Split Files", то после завершения процесса склейки файла его исходные фрагменты с расширением .split будут удалены.


Сообщение программы о завершении указанного действия.

Чтобы скачать программу, перейдите на сайт и нажмите на кнопку: