ค้นหาไฟล์ซ้ำใน OSX โดยแฮช


14

ฉันกำลังมองหาวิธีการค้นหาไฟล์ที่กำหนดใน OSX (ไม่ฝักใฝ่ฝ่ายใด แต่โดยทั่วไปแล้ว OSX) โดยเฉพาะอย่างยิ่งฉันต้องการทำดังต่อไปนี้:
กำหนด File_001 ฉันต้องการค้นหาว่าในระบบไฟล์มีสำเนาของไฟล์นี้อยู่หรือไม่
ไม่ใช่แค่ชื่อเดียวกันฉันต้องการให้วิธีเปรียบเทียบเป็นอัลกอริทึมการแปลงแป้นพิมพ์เช่น MD5, SHA เป็นต้น

"ตัวค้นหาไฟล์ที่ซ้ำกัน" ส่วนใหญ่ฉันได้ลองค้นหารายการที่ซ้ำกันทั้งหมดในไดรฟ์ / ระบบ ฉันอยากจะส่งไฟล์หนึ่งไฟล์และค้นหาไฟล์ซ้ำ

ไม่มีใครรู้ว่าโปรแกรมดังกล่าวมีอยู่? บางทีฟังก์ชั่นที่ไม่ชัดเจนของ Spotlight?


1
ระวังแฮชพิจารณาว่าไฟล์ที่กำหนดเป็นสำเนาหรือไม่ วิธีการนี้อาจล้มเหลวด้วยไฟล์. emlx (รูปแบบไฟล์ของ Apple Mail) ในฐานะที่เป็นตัวช่วยสปอตไลต์ OSX จะผนวกข้อมูลเมตาลงในไฟล์เมล อีเมลเดียวกันในสองเส้นทางที่ต่างกันอาจมีเมทาดาทาที่แตกต่างกันแม้ว่า Message-id จะเหมือนกัน แฮชที่แตกต่างกันสำหรับสองไฟล์ที่มีอีเมลแบบดิบเหมือนกัน
จอห์นดี.

คำตอบ:


17

fdupesนอกจากนี้คุณยังอาจใช้ ไม่มีตัวเลือกในการค้นหาไฟล์ที่ซ้ำกัน แต่คุณสามารถ grep เอาท์พุทชื่อไฟล์:

fdupes -r1 .|grep filename

-rเรียกคืนไปยังไดเร็กทอรีและ-1พิมพ์ไฟล์ที่ซ้ำกันแต่ละกลุ่มในบรรทัดเดียว

ตัวอย่างที่มีประโยชน์อื่น ๆ :

fdupes -r . ค้นหาไฟล์ที่ซ้ำกันทั้งหมดภายใต้ไดเรกทอรีปัจจุบัน

fdupes -r . -dN ลบทั้งหมดยกเว้นรายการซ้ำแรกจากกลุ่มที่ซ้ำกันแต่ละกลุ่ม

fdupes -r dir1 dir2|grep dir1/|xargs rmdir1ลบที่ซ้ำกันใน

คุณสามารถติดตั้งกับfdupesbrew install fdupes


1
เป็นไปได้ไหมที่จะมีรายการไฟล์ที่ไม่ซ้ำกันในไดเรกทอรีปัจจุบัน
กาการีน

7

คุณสามารถสร้างสิ่งนี้ด้วยตัวเองได้ง่ายๆด้วยคำสั่งเชลล์:

  • find ~ -type f -exec md5 -r '{}' \; > /tmp/md5.list

    จะสร้างรายการ md5 hash สำหรับไฟล์ทั้งหมดของคุณ

  • grep $(md5 -q FILE-TO-SEARCH) /tmp/md5.list

    จะค้นหาแฮช md5 ของ FILE-TO-SEARCH

การรันคำสั่งแรก (โดยเฉพาะถ้าคุณเรียกใช้ข้ามทั้งแผ่น) จะใช้เวลานานกว่า


หากคุณต้องการค้นหาเพียงไฟล์เดียวคุณสามารถใช้

SIZE=$(stat -f '%z' FILE-TO-SEARCH)
MD5=$(md5 -q FILE-TO-SEARCH)
find ~ -type f -size ${SIZE}c | while read f; do
    [[ $MD5 = $(md5 -q "$f") ]] && echo $f
done

การผ่านครั้งแรกควรเป็นการค้นหาด้วยการทำงานขนาดที่แน่นอน
biziclop

@biziclop หากคุณต้องการค้นหาเพียงไฟล์เดียวใช่ หากคุณต้องการค้นหาหลาย ๆ อันมันจะเร็วกว่าในการสร้างดัชนีหนึ่งครั้งและเพียงแค่ค้นหาไฟล์ดัชนีหลังจากนั้น
nohillside

1
แน่นอนว่าฉันเพิ่งสังเกตุประโยคนี้ในคำถามว่า: "ฉันอยากจะส่งไฟล์หนึ่งไฟล์และค้นหาไฟล์ซ้ำ"
biziclop

fdupes ควรเร็วขึ้นถ้าทำการเปรียบเทียบวันที่ก่อนจากนั้นแฮชบางส่วนจากนั้นแฮชเต็ม
กาการีน

1

สิ่งนี้จะใช้งานได้หากคุณแทนที่ขนาดและแฮชสำหรับ FILE_001 ลงในคำสั่ง

198452 ไบต์คือขนาดไฟล์ที่ฉันใช้และไฟล์ md5 hash คือ 3915dc84b4f464d0d550113287c8273b

find . -type f -size 198452c -exec md5 -r {} \; |
    grep -o "3915dc84b4f464d0d550113287c8273b\ \(.*\)" | awk '{print $2}'

เอาต์พุตจะเป็นรายการไฟล์ที่มีชื่อพา ธ ซึ่งสัมพันธ์กับไดเร็กทอรีที่ส่งไปยังคำสั่ง find

วิธีการนี้มีข้อดีคือจะแฮชไฟล์ที่ตรงกับขนาดของต้นฉบับของคุณและจะมีเพียงชื่อไฟล์เอาต์พุตที่ตรงกับแฮช


0

หากคุณไม่ต้องการที่จะยุ่งกับสคริปต์ที่คุณสามารถได้ใกล้ชิดกับพฤติกรรมที่คุณต้องการด้วยAraxis ค้นหาไฟล์ที่ซ้ำ $ 10 ในMac App Store นอกจากนี้ยังมีการสาธิต 7 วันในเว็บไซต์ของพวกเขา ค้นหาไฟล์ที่ซ้ำกันค้นหาไฟล์ที่ซ้ำกันโดยการคำนวณแฮชสำหรับแต่ละไฟล์

คุณสามารถประมาณพฤติกรรมที่คุณต้องการให้คุณตั้งค่าโฟลเดอร์ด้วยไฟล์เดียวที่คุณกังวลจากนั้นเพิ่มโฟลเดอร์ที่คุณต้องการค้นหาสิ่งนี้จะรายงานการทำสำเนาอื่น ๆ หากมีในพา ธ การค้นหา

แอพนี้มีคุณสมบัติการเรียงลำดับที่ดีมากมายทำให้ได้ผลลัพธ์ที่เข้าใจง่าย

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