Наутилус правой кнопкой мыши скрипт для base64

Я хотел бы добавить скрипт nautilus для правого клика, как конвертировать выбранный файл с base64, но не повезло. Регулярная команда в терминале выглядит так:

base64 input.jpg output.txt

Это мой ближайший сценарий для этого;

#!/bin/sh
echo "$NAUTILUS_SCRIPT_SELECTED_FILE_Path" | base64 > Base64

Но это дает путь к файлу как base64. Кто-нибудь может мне помочь по этому поводу?

3 ответа

Решение

Я предполагаю, что вы уже можете добавить собственный скрипт в nautilus и вам нужен только правильный скрипт для выполнения реальной работы, если это так, попробуйте этот скрипт:

#!/bin/bash
# Generating base64 files from nautilus
m=0 # counter
while [ -n "$1" ] && [ -f "$1" ] 
do
   echo " " >> output.txt     
   echo "$1" >> output.txt
   base64 "$1" >> output.txt
   echo " " >> output.txt
   m=$(($M + 1))
   shift
   echo " " >> output.txt           
done
zenity --info --text="Operations finished and "$m" file(s) encoded"
exit 0

Пожалуйста, сделайте файл исполняемым с:

chmod +x /path/to/script

Разъяснение:

  1. -n "$1" проверяет, являются ли значения больше 0, т.е. не 0
  2. -f "$1" проверяет, существует ли файл и является ли он обычным файлом
  3. shift перемещается по заданным аргументам
  4. m=$(($m + 1)) добавляет 1 в 0 начальное значение счетчика для отслеживания количества конвертируемых файлов
  5. zenity отображает диалоговое окно с указанием конца операции.

Ваш оригинальный скрипт имеет несколько проблем:

  • "$NAUTILUS_SCRIPT_SELECTED_FILE_Path" все они должны быть написаны заглавными буквами и написаны по-разному, как в "$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS".
  • echo "$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS" | base64 будет только кодировать строку "$ NAUTILUS_SCRIPT_SELECTED_FILE_PATHS" и все. Если вы хотите закодировать файл, вам нужно передать эту переменную через xargs или еще лучше - передайте это напрямую. base64 может принимать файлы в качестве аргументов, таким образом base64 "$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS" это то, что вы действительно хотите сделать. Здесь нет труб, нет echo,

Ниже я приведу альтернативный и довольно упрощенный подход

скрипт

#!/bin/bash
for item in "$@"
do
   file=$(basename "$item" )
   base64 "$item" > "$HOME/$file.base64"
done

инструкции

  • Поместите этот файл в ~/.local/share/nautilus/scripts/ каталог
  • убедитесь, что он исполняется с chmod +x <path to script here> команда.
  • Выберите нужные файлы, щелкните правой кнопкой мыши и перейдите в подменю скриптов. Выберите свой сценарий.
  • После завершения сценария каждый файл в кодировке base64 будет помещен в вашу домашнюю папку с исходным именем файла и .base64 расширение. Вы можете изменить сценарий для создания .base64 файлы в том же каталоге, что вполне нормально, но это может быть проблемой, если у вас нет разрешения на создание файлов в этом каталоге.

    Конечно, этот сценарий немного упрощен. Я создал немного более сложный скрипт в Python3, который вы можете найти в моем репозитории GitHub для скриптов nautilus. Он делает немного больше, чем другие скрипты - проверяет тип файла, показывает информацию и всплывающие окна с ошибками и т. Д.

Спасибо всем, ребята, я сделал два сценария с вашей помощью и предложения для кодирования и декодирования.

Encode:

#!/bin/bash
for item in "$@"
do
   mkdir /yourpath/encode
   file=$(basename "$item" )
   base64 "$item" > "/yourpath/encode/$file-base64"
done

Decode:

for item in "$@"
do
   mkdir /yourpath/decode
   file=$(basename "$item" )
   name=`echo $file | cut -f1 -d'-'`
   base64 -d "$item" > "/yourpath/decode/$name"

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