Utilizzo di Nautilus per confrontare il file con gli appunti contenenti testo
Questa risposta viene utilizzata principalmente per confrontare un file con il testo negli Appunti che è stato copiato da Internet. Il testo degli Appunti potrebbe essere stato copiato da un altro file sul tuo sistema, rendendolo una risposta idonea.
Le differenze tra i file sono evidenziate usando il diff
comando nativo di bash e quindi visualizzate usando gedit
. meld
Tuttavia, questo può essere modificato o qualsiasi altro pacchetto di terze parti.
Questa risposta utilizza la funzione integrata di Nautilus per eseguire uno script personalizzato dopo aver selezionato un file:
#!/bin/bash
# NAME: clipboard-diff
# PATH: $HOME/.local/share/nautilus/scripts
# DESC: Find differences bewteen selected file on disk and clipboard.
# CALL: Called from Nautilus file manager.
# DATE: March 18, 2017. Modified: March 31, 2017.
# NOTE: The clipboard would contain text highlighted on website and copied
# with <ctrl>+<C>. Requires command `xclip` to be installed.
# Must have the xclip package. On Ubuntu 16.04, not installed by default
command -v xclip >/dev/null 2>&1 || { zenity --error --text "Install xclip using: 'sudo apt install xclip' to use this script. Aborting."; exit 99; }
# strip new line char passed by Nautilus
FILENAME=$(echo $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS | sed -e 's/\r//g')
# Multiple files can't be selected.
LINE_COUNT=$(wc -l <<< "$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS")
LINE_COUNT=$((LINE_COUNT-1))
if [[ $LINE_COUNT > 1 ]] ; then
zenity --error --text "Ony one file can be selected at a time! "
exit 1
fi
# Object type must be "file..." (ie no directories, etc.)
if [ -d "${FILENAME}" ] ; then
zenity --error --text "$FILENAME is a directory!";
exit 1
else
if [ -f "${FILENAME}" ]; then
: # Bash noop
else
zenity --error --text "${FILENAME} is not a file!";
exit 2
fi
fi
# Get clipboard contents into working file
workfile="/tmp/clipboard-work-"$(date +%s)
xclip -o > $workfile
# Create temporary file name so two or more open instances won't clash
differences="/tmp/clipboard-diff-"$(date +%s)
# Compare file differences
# -q brief -B ignore blank lines, -u only differences
diff --unified=2 -w -b -B -I --suppress-blank-empty \
--suppress-common-lines --ignore-all-space \
${FILENAME} $workfile > $differences
# If file doesn't exist, errors in diff parameters
# If file size =0 there were no differences
if [[ -f $differences ]] ; then
if [[ -s $differences ]] ; then
# File not empty.
gedit $differences
else
zenity --info --text "$workfile matches $differences"
fi
else
zenity --error --text "cliboard-diff - error in diff parameters."
fi
# clean up /tmp directory
rm $workfile
rm $differences
exit 0
NOTA: ho sviluppato questo script Nautilus un paio di settimane fa e intendevo pubblicarlo come nuovo Q&A, ma sono stato costretto a perdere tempo e non ero sicuro che qualcuno potesse davvero interessarsene.
Uscita campione
In questo esempio stiamo confrontando lo script effettivo pubblicato qui in AU prima del 31 marzo 2017 con la versione rivista il 31 marzo 2017. Nota come sono state impostate nuove informazioni e messaggi di errore.
Il diff
comando è molto potente e come tale ha una miriade di parametri di controllo. Digitare man diff
il terminale per le pagine del manuale o info diff
per ulteriori dettagli sull'utilizzo dei comandi.