ใช้ Nautilus เพื่อเปรียบเทียบไฟล์กับคลิปบอร์ดที่มีข้อความ
คำตอบนี้ใช้เพื่อเปรียบเทียบไฟล์กับข้อความในคลิปบอร์ดที่คัดลอกมาจากอินเทอร์เน็ต ข้อความคลิปบอร์ดอาจถูกคัดลอกมาจากไฟล์อื่นบนระบบของคุณ - ทำให้นี่เป็นคำตอบที่เหมาะสม
ความแตกต่างของไฟล์จะถูกเน้นใช้พื้นเมืองทุบตีของคำสั่งและจากนั้นแสดงโดยใช้diff
gedit
สิ่งนี้สามารถปรับเปลี่ยนเป็นmeld
หรือแพ็คเกจอื่น ๆ ได้
คำตอบนี้ใช้ฟังก์ชันในตัวของ Nautilus เพื่อเรียกใช้สคริปต์ที่กำหนดเองหลังจากเลือกไฟล์:
#!/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
หมายเหตุ:ฉันพัฒนาสคริปต์ Nautilus นี้เมื่อสองสามสัปดาห์ที่ผ่านมาและมีความหมายที่จะโพสต์เป็นคำถามและคำตอบใหม่ แต่ได้รับการกดดันมาเป็นระยะเวลาหนึ่งและไม่แน่ใจว่าใครจะสนใจสิ่งนั้นทั้งหมด
ตัวอย่างผลลัพธ์
ในตัวอย่างนี้เรากำลังเปรียบเทียบสคริปต์จริงที่โพสต์ไว้ที่นี่ใน AU ก่อนวันที่ 31 มีนาคม 2017 กับรุ่นที่ได้รับการแก้ไขในวันที่ 31 มีนาคม 2017 สังเกตว่าการตั้งค่าข้อมูลและข้อความแสดงข้อผิดพลาดใหม่เป็นอย่างไร
diff
คำสั่งจะมีประสิทธิภาพมากและเป็นเช่นนี้มีมากมายของพารามิเตอร์ควบคุม พิมพ์man diff
เทอร์มินัลสำหรับหน้าคู่มือหรือinfo diff
รายละเอียดการใช้คำสั่งเพิ่มเติม