вторник, 5 марта 2024 г.

Склеить файл, разрезанный при помощи split, в терминале без указания терминальной команды

В данной публикации рассматривается обратная операция склеить файл, который был разрезан на части посредством терминальной команды split. Несмотря на выполнение команды именно в терминале от пользователя потребуется только пару раз щёлкнуть кнопкой мыши. 

 Создайте исполняемый файл sh с содержанием:

#!/bin/bash
echo " "
echo " "
echo "     Выберите папку с исходными файлами,"
echo "     имена которых начинаются на x..."
echo " "
echo " "
sleep 3
dir=$(zenity --file-selection --directory)
zenity --width=280 --question --title "Имя файла" --text="Укажите полное имя склеиваемого файла,\nвключая его расширение, например:\n\nХудожественный фильм.mkv или\nДокументальная телепередача.mp4\n $task" \
--ok-label="Да" \
--cancel-label="Нет"
answer=$?
if [ "$answer" -eq 0 ]; then
    zenity --width=100 --title "Ввод текста" --text "Ввод имени файла с расширением:" --entry > /tmp/output.txt
      elif [ "$answer" -eq 1 ]; then
      > /tmp/output.txt
      elif [ "$answer" -eq 5 ]; then
      > /tmp/output.txt
fi
if [ -s /tmp/output.txt ]; then
    cd "$dir"
    echo "     Производится склейка частей"
    echo "     в файл с указанным именем."
    echo " "
    echo "     По завершении процесса Вы получите"
    echo "     сообщение в этом же окне."
    cat x* > "$dir/$(cat /tmp/output.txt)"
    find "$dir" -maxdepth 1 -name 'x*' -exec rm {} \;
    echo " "
    echo " "
    echo "     Процесс успешно завершён."
    echo "     Исходные файлы х... удалены."
    echo " "
    echo " "
    sleep 7
    xdg-open "$dir" &
  else
    echo " "
    echo "     Вы не указали имя файла."
    echo " "
    sleep 3
fi
rm /tmp/output.txt
exit

В процессе работы сценария (скрипта bash) отображаются две формы запросов:



C вариантами ответов "Да" и "OK" всё понятно. В результате выполнения указанных выше форм создаётся файл /tmp/output.txt , содержащий имя выходного файла с его расширением.

Если же выбрано "Нет" в первой форме или "Отменить" во второй, либо нажата кнопка закрытия окна запроса, то также создаётся файл /tmp/output.txt , но без какого-либо содержания. То есть, с точки зрения его наполнения он является пустым.

Далее при помощи инструкции if [ -s /tmp/output.txt ] файл анализируется на наличие в нём содержания. Если он признаётся как "не пустой", то в выбранной в самом начале папке содержание всех файлов, имена которых начинаются на букву x, копируются в файл, имя которого считывается из файла /tmp/output.txt  По завершении процесса исходные файлы x... удаляются и в сопоставленном приложении (как правило, файловом менеджере) открывается папка со склеенным файлом.

Процесс сопровождается поясняющими фразами, отображаемыми в окне терминала. Эти фразы указаны в строках, начинающихся с echo. Сами тексты сообщений содержатся между кавычками. Число пробелов от левой кавычки до буквы подбиралось экспериментально с целью наилучшего восприятия строк текста в окне терминала.

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

Если файл признаётся как "пустой", то никаких действий не производится, а просто отображается сообщение о том, что имя файла не указано.

После этого производится удаление /tmp/output.txt и работа скрипта завершается с автоматическим закрытием окна терминала.

После создания скрипта sh создайте для него кнопку запуска для его вызова из меню, например,

xed /home/minter/.local/share/applications/join.desktop

и впишите в него следующее:

[Desktop Entry]
Name=Join
Exec=/home/minter/Tools/scripts/modules/join.sh
Comment=
Terminal=true
PrefersNonDefaultGPU=false
Icon=emblem-plus
Type=Application
Categories=GTK;Development;
Name[ru]=Склеить файлы

В строке Exec= указывается полный путь до созданного файла sh

Icon= указывает на значок, под которым эта кнопка запуска будет отображаться в меню.

Categories=GTK;Development; означает, что кнопка будет расположена в меню "Программирование" в Cinnamon или "Разработка" в xfce. Если эту строку убрать, то кнопка будет расположена в меню "Прочие" в Cinnamon или "Прочее" в xfce.

 Name[ru]=Склеить файлы является необязательной строкой, указывающей на то, что кнопка должна отображаться не под именем Join, а под именем "Склеить файлы".

Перейдите в каталог applications

xdg-open /home/user/.local/share/applications

(user – это ваша домашняя папка) и в свойствах созданной кнопки запуска в разделе "Права" укажите, что его можно исполнять как программу. В Cinnamon он будет отображён как файл Склеить файлы без расширения, а в xfce как файл Join.desktop  Чтобы в файловом менеджере Thunar вместо значка шестерёнки отображался значок, указанный в строке Icon= в свойствах файла перейдите в раздел "Значок запуска" и поставьте галочку в поле "Установить этот файл как доверенный".

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

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