3

when I click the compress option on a file or folder, by right clicking on that file and choosing compress, I am presented with a simple menu form that only lets me choose the type of file to convert to: zip, 7zip, tar.xz. Is it possible to add the option password to that simple menu so that I can convert the files protected with a password more quickly (without having to go to the menu and choosing the password option)? Thanks!

  • See this: https://askubuntu.com/questions/1048780/nautilus-script-that-creates-a-password-protected-zip – FedKad Sep 08 '20 at 08:53
  • @fedonkadifeli Thanks for the link. I didn't actually understand what was proposed but I followed a couple of links and I'm resigned to forget the right click option... – Hugo Carvalho Sep 12 '20 at 22:33

2 Answers2

1

I created a very basic script to call it as a Nautilus (File Manager) Action. You can add this script as an action to your File Manager by using the FileManager-Actions Configuration Tool.

Install the FileManager-Actions Configuration Tool using:

$ sudo apt install filemanager-actions

My script uses zenity to display an input form. If zenity is not already installed, you can install it using:

$ sudo apt install zenity

The script is like this:

#!/bin/bash

if (( $# != 1 )) ; then aname="" else aname="$(echo "$1"|sed -e 's/.[^./]*$//').7z" fi answer=$(zenity --forms --title="Create Compressed File"
--text="Archive Name: $aname" --add-entry="New Archive Name:"
--add-password="Password:" --add-password="Confirm Password:") case "$?" in

  1. echo "Cancelled" >&2 ; exit 1 ;;

-1) echo "Error!" >&2 ; exit -1 ;; 0) IFS="|" read -r newaname pass1 pass2 <<< "$answer" ;; esac if [[ "$pass1" != "$pass2" ]] ; then echo "Passwords do no match!" >&2 exit 2 fi if [[ -z "$pass1" ]] ; then echo "No password is given!" >&2 exit 3 fi [[ "$newaname" == "" ]] && newaname="$aname" if [[ -z "$newaname" ]] ; then echo "No archive name is given!" >&2 exit 4 fi

7z -t7z -p"$pass1" a "$newaname" "$@"

You can put a copy of it somewhere in your path (and make it executable). I used compress_with_pass.sh as the file name for the script.

The script prompts you for the archive file name (if there is a single file to be compressed, it automatically replaces the extension of the file with .7z) and the password for the archive.

To add this script as a "File Manager Action" use the File-Manager Actions Configuration Tool you installed as I described above and add an action like this (only the fields that are important are shown here):

Action tab:

  • ✓ Display item in selection context menu
  • Context label: COMPRESS WITH PASSWORD

Command tab:

  • Path: gnome-terminal
  • Parameters: -- bash -c "compress_with_pass.sh %F ; read a"

Execution tab:

  • Execution mode: Normal
  • Change the other fields according to your needs.

After this, you can select one or more files in your File Manager and right click to access the action called: COMPRESS WITH PASSWORD.

Notes:

  • The script can be improved to allow compression for other formats.
  • You can use yad for more advanced script input/output (GUI).

Update for Ubuntu 20.10

Since the filemanager-actions package is no longer available in Ubuntu 20.10, we have to revert to Nautilus Scripts. I modified the above script accordingly and copied the new version below:

#!/bin/bash
# See: https://help.ubuntu.com/community/NautilusScriptsHowto

msg () { zenity --info --no-wrap --no-markup --text="$*" }

aname=$(echo "$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS" | head -1) if [[ $aname != "" ]] ; then aname="$(echo "$aname"|sed -e 's/.[^./]*$//').7z" fi answer=$(zenity --forms --title="Create Compressed File"
--text="Archive Name: $aname" --add-entry="New Archive Name:"
--add-password="Password:" --add-password="Confirm Password:") case "$?" in

  1. msg "Cancelled" ; exit 1 ;;

-1) msg "Error!" ; exit -1 ;; 0) IFS="|" read -r newaname pass1 pass2 <<< "$answer" ;; esac if [[ "$pass1" != "$pass2" ]] ; then msg "Passwords do no match!" exit 2 fi if [[ -z "$pass1" ]] ; then msg "No password is given!" exit 3 fi [[ "$newaname" == "" ]] && newaname="$aname" if [[ -z "$newaname" ]] ; then msg "No archive name is given!" exit 4 fi

tmpfile=$(mktemp) echo "$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS" >"$tmpfile" out1=$(echo 7z -t7z -p&quot;"$(echo $pass1|sed 's/./*/g')"&quot; a &quot;"$newaname"&quot; -i@"$tmpfile") out2=$(7z -t7z -p"$pass1" a "$newaname" -i@"$tmpfile" 2>&1)

msg "$out1 ___ $out2"

rm "$tmpfile"

You have to put the script under the directory ~/.local/share/nautilus/scripts with an appropriate name (say CompressWith_Pass) and make it executable (chmod +x ~/.local/share/nautilus/scripts/CompressWith_Pass).

After that, the usage is similar: You can select one or more files in your File Manager and right click to access the Scripts menu item having CompressWithPass as a sub-item.

Pablo Bianchi
  • 15,657
FedKad
  • 10,515
0

You can add a password using the archive manager.

ra314
  • 107