Utilisation de Nautilus pour comparer un fichier au presse-papiers contenant du texte
Cette réponse est principalement utilisée pour comparer un fichier au texte du presse-papiers qui a été copié à partir d'Internet. Le texte du presse-papiers aurait cependant pu être copié à partir d'un autre fichier de votre système, ce qui en fait une réponse éligible.
Les différences de fichiers sont mises en évidence à l'aide de la diff
commande native de bash, puis affichées à l'aide de gedit
. meld
Cependant, cela peut être modifié ou tout autre package tiers.
Cette réponse utilise la fonction intégrée de Nautilus pour exécuter un script personnalisé après avoir sélectionné un fichier:
#!/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
REMARQUE: j'ai développé ce script Nautilus il y a quelques semaines et je voulais le publier en tant que nouveau Q&A, mais j'ai été pressé par le temps et je ne savais pas si quelqu'un serait vraiment intéressé par cela.
Exemple de sortie
Dans cet exemple, nous comparons le script réel publié ici dans AU avant le 31 mars 2017 à la version révisée le 31 mars 2017. Remarquez comment les nouvelles informations et les messages d'erreur ont été configurés.
La diff
commande est très puissante et possède donc une myriade de paramètres de contrôle. Tapez man diff
le terminal pour les pages de manuel ou info diff
pour plus de détails sur l'utilisation des commandes.