Usando Nautilus para comparar el archivo con el portapapeles que contiene texto
Esta respuesta se usa principalmente para comparar un archivo con un texto en el portapapeles que se copió de Internet. Sin embargo, el texto del portapapeles podría haberse copiado de otro archivo en su sistema, lo que lo convierte en una respuesta elegible.
Las diferencias de archivo se resaltan usando el diff
comando nativo de bash y luego se muestran usando gedit
. Sin meld
embargo, esto puede modificarse a cualquier otro paquete de terceros.
Esta respuesta utiliza la función incorporada de Nautilus para ejecutar un script personalizado después de seleccionar un archivo:
#!/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: Desarrollé este script Nautilus hace un par de semanas y tenía la intención de publicarlo como un nuevo Q&A, pero he estado presionado por el tiempo y no estaba seguro de si alguien realmente estaría tan interesado en él.
Salida de muestra
En este ejemplo, estamos comparando el script real publicado aquí en AU antes del 31 de marzo de 2017 con la versión revisada el 31 de marzo de 2017. Observe cómo se configuraron la nueva información y los mensajes de error.
El diff
comando es muy poderoso y, como tal, tiene una gran cantidad de parámetros de control. Escriba man diff
el terminal para las páginas del manual o info diff
para obtener más detalles sobre el uso de comandos.