วิธีการลบไฟล์ที่ซ้ำกันด้วย fdupes?


15

เมื่อฉันเรียกใช้fdupesจะพบไฟล์ซ้ำซ้อนมากกว่า 30,000 ไฟล์ ฉันต้องการเก็บไฟล์หนึ่งไฟล์และลบไฟล์ซ้ำทั้งหมด (เพราะบางไฟล์เป็นไฟล์ระบบ) โปรดให้คำสั่งหรือสคริปต์ในการทำสิ่งนี้โดยไม่ต้องกด "1 หรือ 2 หรือทั้งหมด" สำหรับแต่ละกลุ่มของไฟล์ที่ซ้ำกัน

คำตอบ:


23

คุณสามารถทำสิ่งนี้ได้หากคุณต้องการเรียกใช้งานแบบเงียบ ๆ (ฉันเพิ่งใช้เพื่อล้างข้อมูลเรียกดูข้อมูลจำนวน 150 GB ที่ทำงานบนที่เก็บบล็อกของ rackspace .. £ kerching !!)

fdupes -rdN dir/

r - recursive
d - preserver first file, delete other dupes
N - run silently (no prompt)

ไม่มีตัวเลือกที่จะย้ายไปที่ถังขยะแทนที่จะลบรายการที่ซ้ำกันหรือไม่
Augustin Riedinger

2
ได้for f in $(fdupes -f .); do gvfs-trash $f; done
Augustin Riedinger

2
@AugustinRiedinger: จะดีกว่าfdupes -f . | xargs -rd '\n' -- gvfs-trashถ้าคุณมีชื่อไฟล์ที่มีช่องว่างและอักขระพิเศษหรือไฟล์จำนวนมาก
David Foerster

@DavidFoerster คุณยังอาจมีชื่อไฟล์ที่มีการขึ้นบรรทัดใหม่ซึ่งจะทำลายคำสั่งของคุณ
Ruslan

@Ruslan: ถูกต้อง แต่ในขณะนี้fdupesไม่มีตัวเลือกสำหรับระเบียนที่สิ้นสุดด้วยค่า null ดังนั้นจึงไม่มีตัวเลือกที่ดีกว่า มันดีกว่าfor f in $(fdupes ...)แน่นอน : -]
David Foerster

9

fdupes มี CLI ที่หลากหลาย:

fdupes -r ./stuff > dupes.txt

จากนั้นการลบรายการที่ซ้ำกันนั้นง่ายพอ ๆ กับการตรวจสอบdupes.txtและลบไดเรกทอรีที่ละเมิด fdupesยังสามารถแจ้งให้คุณลบรายการที่ซ้ำกันตามที่คุณไป

fdupes -r /home/user > /home/user/duplicate.txt

duplicate.txtผลลัพธ์ของคำสั่งไปใน

fdupes จะเปรียบเทียบขนาดและแฮช MD5 ของไฟล์เพื่อค้นหารายการที่ซ้ำกัน

ตรวจสอบfdupesmanpageสำหรับข้อมูลการใช้งานโดยละเอียด


ฉันพบวิธี ใช่ 1 | fdupes -rd / mnt / hda5 / midi_files
user84055


2

ฉันจะใช้วิธีที่ปลอดภัยกว่านี้:

สร้างสคริปต์และย้ายไฟล์ที่ซ้ำกันไปยังโฟลเดอร์ใหม่ หากคุณย้ายไปยังโฟลเดอร์ที่อยู่นอกโฟลเดอร์เดิม fdupes จะไม่รายงานไฟล์ที่ซ้ำกันในการสแกนครั้งที่สองและจะปลอดภัยกว่าที่จะลบ

#!/bin/bash

# Save default separator definitions
oIFS=$IFS
# define new line as a separator, filenames can have spaces
IFS=$'\n';

# For each file (f) listed as duplicated by fdupes, recursively
  for f in `fdupes -r -f .`
  do
    # Log the files I'm moving
    echo "Moving $f to folder Duplicates" >> ~/log.txt
    # Move the duplicated file, keeping the original in the original folder
    mv $f Duplicates/
  done

# restore default separator definitions
IFS=$oIFS

1

ฉันใช้fslintและDupeGuruมาระยะหนึ่งแล้ว

  • FSlint รองรับการเลือกโดย wildcard และวิธีการล้างข้อมูลอื่น ๆ
  • DupeGuru รองรับ regex

ทั้งสองสามารถจัดการ> 10,000 ไฟล์ / โฟลเดอร์

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