แก้ไขเพื่อการแก้ไข & ตัวเลือกความชัดเจน - ฉันลืม '--brief'
diff -rs --brief "$dir1" "$dir2"
-r, --recursive recursively compare any subdirectories found
-s, --report-identical-files report when two files are the same
-q, --brief report only when files differ
--speed-large-files assume large files and many scattered small changes
และเพิ่มตัวเลือกอื่น ๆ เพื่อลิ้มรสทั้งนี้ขึ้นอยู่กับสิ่งที่คุณกำลังเปรียบเทียบ:
-i, --ignore-case ignore case differences in file contents
-b, --ignore-space-change ignore changes in the amount of white space
-B, --ignore-blank-lines ignore changes whose lines are all blank
--strip-trailing-cr strip trailing carriage return on input
--ignore-file-name-case ignore case when comparing file names
diff -rs จะอ่านทุกไบต์ของต้นฉบับและสำเนาและไฟล์รายงานที่เหมือนกัน
รูปแบบเอาต์พุตต่าง ๆ ถูกกำหนดโดย POSIX ดังนั้นมันจึงพกพาได้สวย คุณอาจต้องการเพิ่มสิ่งที่ชอบ:
| ที diff-out.1 | grep -v -Ee 'Files. * และ. * เหมือนกัน'
คุณสามารถใช้ chksums หรือ hashes ได้ แต่จากนั้นคุณต้องทำให้ข้อมูลเหล่านั้นตรงกันกับแผนผังไฟล์ดังนั้นคุณจะกลับไปอ่านทุกไบต์ของไฟล์ทุกไฟล์
แก้ไข - ยาวเกินกว่าจะแสดงความคิดเห็นได้เนื่องจาก:
ไฟล์ที่มีขนาดเกิน 10GB จะไม่ได้รับการตรวจสอบ
คุณอาจต้องการลองใช้ตัวเลือก diff นี้: - speed-large-files
เป็นไปได้ว่า diff ที่คุณใช้นั้นใช้งานไม่ได้ดีกับไฟล์ที่มีขนาดใหญ่มาก (ใหญ่กว่าหน่วยความจำระบบเป็นต้น) ดังนั้นจึงมีการรายงานความแตกต่างระหว่างไฟล์ที่เหมือนกัน
ฉันคิดว่ามีตัวเลือก -h หรือ 'bdiff' ซึ่งทำได้ดีกว่าในไฟล์ขนาดใหญ่ แต่ฉันหาไม่เจอใน Fedora ฉันเชื่อว่าตัวเลือก --speed-large-files เป็นตัวต่อของตัวเลือก '-h' "half-hearted compar"
วิธีที่แตกต่างคือการทำซ้ำคำสั่ง rsync ที่คุณใช้ด้วย '-vin' (verbose, itemize, no_run) สิ่งนี้จะรายงานความแตกต่างที่ rsync พบ - และไม่ควรมี
หากต้องการย้ายไฟล์บางไฟล์คุณกำลังดูสคริปต์ที่มีลักษณะดังนี้:
if [ cmp -s "$dir1/$path" "$dir2/$path" ] ; then
target="$dir2/verified/$path"
mkdir -p $(basename "$target")
mv "$dir2/$path" "$target"
fi
แต่ฉันไม่แนะนำให้ทำเช่นนั้น คำถามพื้นฐานคือ "ฉันจะแน่ใจได้อย่างไรว่า rsync คัดลอกลำดับชั้นของไฟล์อย่างถูกต้อง" และถ้าคุณสามารถแสดงให้คุณเห็นว่า rsync ทำงานได้ดีด้วย diff หรือเครื่องมืออื่น ๆ คุณก็สามารถใช้ rsync แทนการทำงานกับมัน
rsync -vin จะทำการเปรียบเทียบกับตัวเลือกอื่น ๆ ที่คุณมอบให้ ฉันคิดว่ามันเป็นค่าเริ่มต้นสำหรับ checksum แต่คุณพูดถูกต้อง -c หรือ --checksum นั้นเป็นสิ่งที่จำเป็น
ยูทิลิตี diff มีไว้สำหรับไฟล์บรรทัดข้อความ แต่ควรรายงาน 'ที่เหมือนกัน' ภายใต้ -s สำหรับไฟล์ไบนารี
- สั้น ๆ ควรระงับเอาท์พุทเนื้อหาไฟล์ใด ๆ - ฉันขอโทษสำหรับการมองเห็นก่อนหน้านี้ - มันถูกฝังกึ่งในสคริปต์ที่น่าเกลียด