Использованиеcsvkit
:
$ csvformat -D '|' file.csv
John|Tonny|345.3435,23|56th Street
Инструменты в csvkit знают, как справиться со сложностями файлов CVS, и здесь мы используем csvformat
, чтобы правильно заменить разделительные запятые на |
. Поля вывода будут заключены в кавычки по мере необходимости.
Пример:
$ cat file.csv
John,Tonny,"345.3435,23",56th Street
The | factory,Ltd.,"0,0",meep meep
$ csvformat -D '|' file.csv
John|Tonny|345.3435,23|56th Street
"The | factory"|Ltd.|0,0|meep meep
Насколько я знаю, есть два простых способа добавить записи в контекстное меню Nautilus:
nautilus-actions
, который, в зависимости от вашего дистрибутива, может быть устаревшим. Я использую Debian Bullseye/sid, где nautilus-actions
недоступен, поэтому я представлю способ, используя скрипт Nautilus . Чтобы узнать больше об этой функциональности Nautilus, вы можете потратить немного времени на Ubuntu сторону StackExchange , там ребята много говорят о скриптах Nautilus. По сути, эта функция позволяет вам добавлять записи контекстного меню в сценарии Bash (или Python, например ), расположенные в вашем каталоге ~/.local/share/nautilus/scripts/
.
Я предлагаю реализовать два сценария :один для шифрования, другой для расшифровки. Ваше контекстное меню будет выглядеть следующим образом, если щелкнуть правой кнопкой мыши -файл:
Сценарий шифрования будет просто
#!/usr/bin/env bash
# Encrypt
# gpg-encrypt Nautilus script
gpg -c --no-symkey-cache "$1" && rm -f "$1"
, где первый аргумент Bash $1
— это путь к файлу, выбранный Nautilus при щелчке правой кнопкой -.
--no-symkey-cache
запрещает gpg
хранить парольную фразу в кэше. По умолчанию парольная фраза хранится в течение определенного времени после шифрования и расшифровки файла.Лично мне эта функция не нравится, поэтому я использую эту опцию.
Я также добавил && rm -f "$1"
, чтобы удалить исходный файл после шифрования, вы можете удалить его, если не хотите.
Сценарий расшифровки будет
#!/usr/bin/env bash
# Decrypt
# gpg-decrypt Nautilus script
ext=`echo "$1" | grep [.]gpg`
if [ "$ext" != "" ]; then
gpg --batch --yes --no-symkey-cache "$1"
else
zenity --error --text "The selected file is not crypted."
fi
Позвольте мне объяснить, что делает скрипт. Он использует переменную ext
, которая пуста, если выбранный файл не является файлом .gpg
, и которая не пуста , если выбранный файл является файлом .gpg
.
Если выбранный файл является зашифрованным .gpg
, сценарий будет использовать команду gpg
для его расшифровки. Я передал параметры --batch --yes
, чтобы перезаписать, если выходной файл уже существует. Например, расшифровка file.gpg
перезапишет file
, если он существует. Если вы не хотите перезаписывать, я предлагаю вам использовать опциюoutput
gpg
и zenity --file-selection
, чтобы указать имя расшифрованного файла.
Если выбранный файл не является зашифрованным .gpg
, сценарий будет использовать zenity --error
для всплывающего -окна ошибки.
Этот сценарий проверяет, зашифрован ли файл, просматривая расширение. Лучший способ сделать это — проверить MIME-тип выбранного файла. MIME-тип зашифрованного файла можно узнать с помощью
$ > file
$ file -b --mime-type file.gpg
application/octet-stream
Посколькуapplication/octet-stream
относится к обычному двоичному файлу и не обязательно к зашифрованному файлу, я не думаю, что этот подход будет лучше, чем проверка расширения файла. С другой стороны, я знаю, что Nautilus сопоставляет мои зашифрованные файлыgpg
-с типом MIME application/pgp-encrypted
. Может быть, кто-то знает, как получить этот MIME-тип из файла .gpg
с помощью чего-то другого, кроме команды file
, в этом случае это будет актуально.
Если вы не хотите использовать два пункта меню, -правый щелчок, вы можете использовать один скрипт:
#!/usr/bin/env bash
# Encrypt-Decrypt
# gpg-encrypt/decrypt Nautilus script
ext=`echo "$1" | grep [.]gpg`
if [ "$ext" != "" ]; then
gpg --batch --yes --no-symkey-cache "$1"
else
gpg -c --no-symkey-cache "$1" && rm -f "$1"
fi
Этот сценарий будет расшифровывать, если выбранный файл является .gpg
файлом, и шифровать, если выбранный файл является любым другим.
Кроме того, вы можете разрешить Nautilus расшифровывать зашифрованное .gpg
двойным щелчком -, добавив следующую запись рабочего стола в каталог ~/.local/share/applications/
.
# Decrypt.desktop
[Desktop Entry]
Name=GPG Decrypt
Terminal=false
Type=Application
MimeType=application/pgp-encrypted;
Exec=gpg --batch --yes --no-symkey-cache %F
NoDisplay=true
Если никакое другое приложение не используется по умолчанию, двойной -щелчок в Nautilus теперь расшифровывает файл. Seahorse может быть выбран в качестве приложения по умолчанию, если вы используете GNOME по умолчанию, в этом случае вам нужно выбрать GPG Decrypt
в Open With Other Application Menu
.
Этот небольшой скрипт Bash установит все в нужное место для вас:
chmod +x 'Encrypt' 'Decrypt' # script files must be executable!
cp Encrypt Decrypt ~/.local/share/nautilus/scripts/
cp Decrypt.desktop ~/.local/share/applications/
update-desktop-database ~/.local/share/applications/
nautilus -q
nautilus
PS:Протестировано на GNOME 3.34.2 и gpg
2.2.17 (вы можете проверить это с помощью$ gpg --version
).
sudo apt install seahorse-nautilus
, затем перезапустите Nautilus с помощью команды :nautilus -q
, затем щелкните файл правой кнопкой мыши и выберите Encrypt