Verwenden von Nautilus zum Vergleichen von Dateien mit Text in der Zwischenablage
Diese Antwort wird hauptsächlich zum Vergleichen einer Datei mit Text in der Zwischenablage verwendet, der aus dem Internet kopiert wurde. Der Text in der Zwischenablage könnte jedoch aus einer anderen Datei auf Ihrem System kopiert worden sein, sodass dies eine in Frage kommende Antwort ist.
Dateiunterschiede werden mit dem systemeigenen diff
Befehl von bash hervorgehoben und dann mit angezeigt gedit
. Dies kann jedoch zu meld
einem anderen Paket von Drittanbietern geändert werden .
Diese Antwort verwendet die integrierte Funktion von Nautilus, um nach Auswahl einer Datei ein benutzerdefiniertes Skript auszuführen:
#!/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
ANMERKUNG: Ich habe dieses Nautilus-Skript vor ein paar Wochen entwickelt und wollte es als neues Q & A veröffentlichen, war aber unter Zeitdruck und war unsicher, ob sich wirklich jemand dafür interessieren würde.
Beispielausgabe
In diesem Beispiel wird das aktuelle Skript, das vor dem 31. März 2017 in AU veröffentlicht wurde, mit der am 31. März 2017 überarbeiteten Version verglichen. Beachten Sie, wie neue Informationen und Fehlermeldungen eingerichtet wurden.
Der diff
Befehl ist sehr leistungsfähig und verfügt als solcher über eine Vielzahl von Steuerungsparametern. Geben Sie man diff
das Terminal für die Handbuchseiten oder info diff
für noch mehr Details zur Befehlsverwendung ein.