четверг, 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

Комментариев нет:

Отправить комментарий