Sử dụng Nautilus để so sánh tệp với bảng tạm chứa văn bản
Câu trả lời này chủ yếu được sử dụng để so sánh một tập tin với văn bản trong bảng tạm được sao chép từ internet. Văn bản clipboard có thể đã được sao chép từ một tệp khác trên hệ thống của bạn - làm cho đây là một câu trả lời đủ điều kiện.
Sự khác biệt của tệp được tô sáng bằng diff
lệnh gốc của bash và sau đó được hiển thị bằng gedit
. Điều này có thể được sửa đổi thành meld
hoặc bất kỳ gói bên thứ ba nào khác.
Câu trả lời này sử dụng chức năng tích hợp của Nautilus để chạy tập lệnh tùy chỉnh sau khi chọn tệp:
#!/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
LƯU Ý: Tôi đã phát triển tập lệnh Nautilus này một vài tuần trước và có ý định đăng nó dưới dạng Hỏi & Đáp mới nhưng đã bị ép thời gian và không chắc chắn liệu có ai thực sự quan tâm đến nó không.
Sản lượng mẫu
Trong ví dụ này, chúng tôi so sánh tập lệnh thực tế được đăng ở đây trong AU trước ngày 31 tháng 3 năm 2017 với phiên bản được sửa đổi vào ngày 31 tháng 3 năm 2017. Lưu ý cách thông tin mới và thông báo lỗi được thiết lập.
Các diff
lệnh là rất mạnh mẽ và như vậy có vô số các thông số kiểm soát. Nhập man diff
vào thiết bị đầu cuối cho các trang thủ công hoặc info diff
để biết thêm chi tiết sử dụng lệnh.