วิธีที่ดีที่สุดในการลบไฟล์ภาพที่ซ้ำกันออกจากคอมพิวเตอร์ของคุณคืออะไร?


14

ฉันมีไฟล์รูปภาพที่ซ้ำกันจำนวนมากในคอมพิวเตอร์ Windows ของฉันในโฟลเดอร์ย่อยที่แตกต่างกันและมีชื่อไฟล์ต่างกัน

โปรแกรม Python script หรือ freeware ใดที่คุณแนะนำให้ลบรายการที่ซ้ำกันออก

(ฉันได้อ่านคำถามที่คล้ายกันนี้แต่ผู้โพสต์มีการถามเกี่ยวกับการทำสำเนาภาพด้วยขนาดไฟล์ที่แตกต่างกันเหมืองของฉันซ้ำซ้อนกับชื่อไฟล์ที่แตกต่างกัน)


2
โปรดทราบว่าแม้ว่าพิกเซลทั้งหมดจะเหมือนกัน แต่ก็อาจมีข้อมูล EXIF ​​ที่แตกต่างกัน (แก้ไขโดยโปรแกรมที่จัดการภาพในบางช่วง) ซึ่งจะทำให้เกิดปัญหากับวิธีแก้ไขปัญหาที่เสนอในปัจจุบัน
user12889

คำตอบ:


17

อย่าพึ่งพาผลรวม MD5

ผลรวม MD5 ไม่ใช่วิธีที่เชื่อถือได้ในการตรวจสอบรายการซ้ำพวกเขาเป็นเพียงวิธีการตรวจสอบความแตกต่าง

ใช้ MD5 เพื่อค้นหาผู้สมัครที่เป็นไปได้ที่ ซ้ำกันแล้วสำหรับแต่ละคู่ที่แบ่งปัน MD5

  1. เปิดทั้งสองไฟล์
  2. ค้นหาไปข้างหน้าในไฟล์เหล่านั้นจนกว่าจะมีความแตกต่าง

เห็นฉันได้รับ downvoted โดยคนทำไร้เดียงสาวิธีการที่จะยื่นบัตรประจำตัวซ้ำกันหากคุณกำลังจะต้องพึ่งพาอย่างสิ้นเชิงกับขั้นตอนวิธีกัญชาเพื่อเห็นแก่ความดีใช้บางสิ่งบางอย่างที่รุนแรงเช่น SHA256 หรือ SHA512 อย่างน้อยคุณจะลดความน่าจะเป็นในการ ระดับที่เหมาะสมโดยการตรวจสอบบิตเพิ่มเติม MD5 อ่อนแออย่างมากสำหรับสภาวะการชน

ฉันยังแนะนำให้ผู้คนอ่านรายชื่อรับเมลที่นี่ชื่อ 'file check': http://london.pm.org/pipermail/london.pm/Week-of-Mon-20080714/thread.html

หากคุณพูดว่า "MD5 สามารถระบุไฟล์ทั้งหมดโดยไม่ซ้ำกัน" แสดงว่าคุณมีข้อผิดพลาดทางตรรกะ

ได้รับช่วงของค่าของความยาวที่แตกต่างจาก 40,000 ไบต์ในความยาว 100,000,000,000 ไบต์ในความยาวจำนวนรวมของการอยู่รวมกันพร้อมที่จะช่วงนั้นอย่างมากเกินจำนวนที่เป็นไปได้ของค่าที่แสดงโดย MD5 ชั่งในที่เพียง 128 บิตของความยาว

แสดงชุดค่าผสม 2 ^ 100,000,000,000 ชุดค่าผสม 2 ^ 128 เท่านั้น ฉันไม่คิดว่าเป็นไปได้

วิธีที่น้อยที่สุด

วิธีไร้เดียงสาน้อยที่สุดและวิธีที่เร็วที่สุดในการกำจัดวัชพืชที่ซ้ำกันมีดังนี้

  1. ตามขนาด : ไฟล์ที่มีขนาดต่างกันต้องไม่เหมือนกัน ใช้เวลาเล็กน้อยเนื่องจากไม่ต้องเปิดไฟล์
  2. โดย MD5 : ไฟล์ที่มีค่า MD5 / Sha ที่แตกต่างกันจะต้องไม่เหมือนกัน การดำเนินการนี้ใช้เวลานานขึ้นเล็กน้อยเนื่องจากต้องอ่านไบต์ทั้งหมดในไฟล์และดำเนินการทางคณิตศาสตร์ แต่จะทำให้การเปรียบเทียบหลายรายการเร็วขึ้น
  3. ความล้มเหลวของความแตกต่างด้านบน : ดำเนินการเปรียบเทียบไบต์ของไฟล์ นี่คือการทดสอบที่ช้าในการดำเนินการซึ่งเป็นสาเหตุที่เหลือไว้จนกว่าจะพิจารณาปัจจัยการขจัดอื่น ๆ ทั้งหมด

Fdupesทำเช่นนี้ และคุณควรใช้ซอฟต์แวร์ที่ใช้เกณฑ์เดียวกัน


7
มีแนวโน้มว่าฮาร์ดไดรฟ์ของคุณจะทำลายภาพอย่างน่าอัศจรรย์กว่าที่ MD5 จะชนกัน "เป็นตัวแทนของชุดค่าผสม 2 ^ 100,000,000,000 ชุดค่าผสมมีเพียง 2 ^ 128 ชุด" - ฉันเห็นด้วยกับคุณที่นี่ ถ้าเขามี 2 ^ 100,000,000,000 ภาพ MD5 (หรืออัลกอริธึมแฮชเกือบทั้งหมด) จะไม่ดี
Greg Dean

4
มีไม่มีการรับประกันเพียงแค่มันไม่น่า มันเป็นไปไม่ได้ ค่อนข้างเป็นไปได้ที่จะมี 10 ไฟล์ที่ทั้งหมดชนกัน แต่แตกต่างกันโดยสิ้นเชิง สิ่งนี้ไม่น่าเป็นไปได้ แต่สามารถเกิดขึ้นได้ดังนั้นคุณต้องทดสอบ
Kent Fredric

2
ขนาดไฟล์จากนั้นเป็น MD5 และจากนั้นเป็นไบต์เท่านั้นสำหรับการตรวจสอบไบต์
แบรดกิลเบิร์

3
@Kent - ฉัน 100% aggree กับคุณ มันเป็นความเกียจคร้านที่จะมองข้ามบางสิ่งบางอย่างเพราะมันไม่น่าเป็นไปได้แม้แต่อย่างที่เรากำลังพูดถึง ฉันจะรำคาญถ้าข้อมูลบางส่วนของฉันถูกทำลายเพียงเพราะคนที่เขียนโปรแกรมคิดว่ามีบางสิ่งที่ไม่น่าจะรบกวนการเขียนโปรแกรม
Joe Taylor

10

มันเป็นหนึ่งซับในระบบปฏิบัติการยูนิกซ์เช่น (รวมถึงลินุกซ์) หรือ Windows ที่ติดตั้ง Cygwin:

find . -type f -print0 | xargs -0 shasum | sort |
  perl -ne '$sig=substr($_, 0, 40); $file=substr($_, 42); \
    unlink $file if $sig eq $prev; $prev = $sig'

md5sum (ซึ่งเร็วกว่าประมาณ 50%) สามารถใช้ได้หากคุณรู้ว่าไม่มีการชนที่สร้างขึ้นโดยเจตนา (คุณมีโอกาสที่ดีกว่าในการชนะลอตเตอรี 10 ครั้งใหญ่กว่าโอกาสที่จะพบการชน md5 ตามธรรมชาติ)

หากคุณต้องการที่จะเห็นภาพทั้งหมดที่คุณมีแทนการลบพวกเขาเพียงแค่เปลี่ยนunlink $fileส่วนที่print $file, "\n"เป็น


1
คุณสามารถใช้ -print0 และ xargs-0 เพื่อจับช่องว่างได้เช่นกัน แต่ find ยังมีตัวเลือก -exec ที่มีประโยชน์ที่นี่: find - ประเภท f -exec shasum {} \; | จัดเรียง ... นอกจากนี้: คุณไม่ควรใช้ @F (-a) เพราะมันจะไม่ทำงานกับการเว้นวรรค ลองใช้สตริงย่อยแทน

โทรดี geocar อัปเดตคำตอบพร้อมคำแนะนำของคุณ

"md5sum (ซึ่งอยู่ที่ประมาณ 50% เร็วกว่า) สามารถนำมาใช้ถ้าคุณรู้ว่ามีการชนกันไม่มีจงใจสร้าง" - ว่า
เกร็กคณบดี

6

ฉันใช้fdupes(เขียนใน C) และfreedups(Perl) ในระบบ Unix และพวกเขาอาจทำงานบน Windows เช่นกัน นอกจากนี้ยังมีคนที่คล้ายกันที่มีการอ้างว่าการทำงานบน Windows: dupmerge, liten(เขียนในหลาม) ฯลฯ


ซอฟต์แวร์ Perl และ Python ควรทำงานเหมือนกันบนระบบ Windows และ * nix โดยถือว่ารายละเอียดของระบบไฟล์ไม่สำคัญ
CarlF

2

หากต้องการลบภาพที่ซ้ำกันบน Windows ลองดูที่DupliFinder สามารถเปรียบเทียบรูปภาพตามเกณฑ์ต่าง ๆ เช่นชื่อขนาดและข้อมูลรูปภาพจริง

สำหรับเครื่องมืออื่น ๆ ในการลบไฟล์ที่ซ้ำกันให้ดูที่บทความ Lifehacker นี้


1

แทนที่จะ DupliFinder ลองโครงการคดเคี้ยวแทนDeadRinger เราได้แก้ไขข้อบกพร่องจำนวนมากในโครงการดั้งเดิมเพิ่มคุณสมบัติใหม่ ๆ มากมายและปรับปรุงประสิทธิภาพอย่างมาก


1

ทางเลือกหนึ่งที่สามารถDupkiller

DupKiller เป็นหนึ่งในเครื่องมือที่เร็วที่สุดและทรงพลังที่สุดสำหรับการค้นหาและลบไฟล์ที่ซ้ำหรือคล้ายกันในคอมพิวเตอร์ของคุณ อัลกอริทึมที่ซับซ้อนซึ่งสร้างขึ้นในกลไกการค้นหาของมันให้ผลลัพธ์ที่สูง - การค้นหาไฟล์ที่รวดเร็ว ตัวเลือกมากมายอนุญาตให้ปรับแต่งการค้นหาได้อย่างยืดหยุ่น

ป้อนคำอธิบายรูปภาพที่นี่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.