Menggunakan Nautilus untuk membandingkan file ke clipboard yang berisi teks
Jawaban ini terutama digunakan untuk membandingkan file dengan teks di clipboard yang disalin dari internet. Teks clipboard bisa saja disalin dari file lain di sistem Anda - menjadikan ini jawaban yang memenuhi syarat.
Perbedaan file disorot menggunakan diff
perintah asli bash dan kemudian ditampilkan menggunakan gedit
. Ini dapat dimodifikasi untuk meld
atau paket pihak ketiga lainnya.
Jawaban ini menggunakan fungsi bawaan Nautilus untuk menjalankan skrip khusus setelah memilih 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
CATATAN: Saya mengembangkan skrip Nautilus ini beberapa minggu yang lalu dan bermaksud mempostingnya sebagai T&J baru tetapi ditekan untuk waktu dan tidak yakin apakah ada orang yang benar-benar tertarik dengan skrip ini.
Output sampel
Dalam contoh ini kami membandingkan skrip aktual yang diposting di sini di AU sebelum 31 Maret 2017 dengan versi yang direvisi pada 31 Maret 2017. Perhatikan bagaimana informasi baru dan pesan kesalahan dibuat.
The diff
perintah sangat kuat dan karena itu memiliki segudang parameter kontrol. Ketik man diff
terminal untuk halaman manual atau info diff
untuk lebih detail penggunaan perintah.