Dosyayı metin içeren panoya karşılaştırmak için Nautilus kullanma
Bu yanıt, öncelikle bir dosyayı internetteki kopyalanan panodaki metinle karşılaştırmak için kullanılır. Pano metni, sisteminizdeki başka bir dosyadan kopyalanmış olabilir - bu, uygun bir yanıt haline gelir.
Dosya farklılıkları bash'ın yerel diff
komutu kullanılarak vurgulanır ve ardından görüntülenir gedit
. Bu, meld
herhangi bir üçüncü taraf paketine veya herhangi bir üçüncü taraf paketine değiştirilebilir .
Bu yanıt, bir dosya seçtikten sonra özel bir komut dosyası çalıştırmak için Nautilus'un yerleşik işlevini kullanır:
#!/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
NOT: Bu Nautilus senaryosunu birkaç hafta önce geliştirdim ve yeni bir Soru-Cevap olarak yayınlamak için anlam ifade ettim, ancak zamana karşı basıldım ve gerçekten onunla ilgilenen herkesin emin olup olmayacağından emin değildim.
Örnek çıktı
Bu örnekte, AU'da 31 Mart 2017'den önce yayınlanan gerçek komut dosyasını 31 Mart 2017'de revize edilen sürümle karşılaştırıyoruz. Yeni bilgi ve hata mesajlarının nasıl kurulduğuna dikkat edin.
diff
Komut çok güçlüdür ve bu şekilde kontrol parametrelerinin sayısız vardır. Tip man diff
manuel sayfaları için veya terminalde info diff
daha da fazla komut kullanım detayları için.