เมื่อฉันเรียกใช้fdupes
จะพบไฟล์ซ้ำซ้อนมากกว่า 30,000 ไฟล์ ฉันต้องการเก็บไฟล์หนึ่งไฟล์และลบไฟล์ซ้ำทั้งหมด (เพราะบางไฟล์เป็นไฟล์ระบบ) โปรดให้คำสั่งหรือสคริปต์ในการทำสิ่งนี้โดยไม่ต้องกด "1 หรือ 2 หรือทั้งหมด" สำหรับแต่ละกลุ่มของไฟล์ที่ซ้ำกัน
เมื่อฉันเรียกใช้fdupes
จะพบไฟล์ซ้ำซ้อนมากกว่า 30,000 ไฟล์ ฉันต้องการเก็บไฟล์หนึ่งไฟล์และลบไฟล์ซ้ำทั้งหมด (เพราะบางไฟล์เป็นไฟล์ระบบ) โปรดให้คำสั่งหรือสคริปต์ในการทำสิ่งนี้โดยไม่ต้องกด "1 หรือ 2 หรือทั้งหมด" สำหรับแต่ละกลุ่มของไฟล์ที่ซ้ำกัน
คำตอบ:
คุณสามารถทำสิ่งนี้ได้หากคุณต้องการเรียกใช้งานแบบเงียบ ๆ (ฉันเพิ่งใช้เพื่อล้างข้อมูลเรียกดูข้อมูลจำนวน 150 GB ที่ทำงานบนที่เก็บบล็อกของ rackspace .. £ kerching !!)
fdupes -rdN dir/
r - recursive
d - preserver first file, delete other dupes
N - run silently (no prompt)
for f in $(fdupes -f .); do gvfs-trash $f; done
fdupes -f . | xargs -rd '\n' -- gvfs-trash
ถ้าคุณมีชื่อไฟล์ที่มีช่องว่างและอักขระพิเศษหรือไฟล์จำนวนมาก
fdupes
ไม่มีตัวเลือกสำหรับระเบียนที่สิ้นสุดด้วยค่า null ดังนั้นจึงไม่มีตัวเลือกที่ดีกว่า มันดีกว่าfor f in $(fdupes ...)
แน่นอน : -]
fdupes
มี CLI ที่หลากหลาย:
fdupes -r ./stuff > dupes.txt
จากนั้นการลบรายการที่ซ้ำกันนั้นง่ายพอ ๆ กับการตรวจสอบdupes.txt
และลบไดเรกทอรีที่ละเมิด fdupes
ยังสามารถแจ้งให้คุณลบรายการที่ซ้ำกันตามที่คุณไป
fdupes -r /home/user > /home/user/duplicate.txt
duplicate.txt
ผลลัพธ์ของคำสั่งไปใน
fdupes
จะเปรียบเทียบขนาดและแฮช MD5 ของไฟล์เพื่อค้นหารายการที่ซ้ำกัน
ตรวจสอบfdupes
manpageสำหรับข้อมูลการใช้งานโดยละเอียด
ฉันจะใช้วิธีที่ปลอดภัยกว่านี้:
สร้างสคริปต์และย้ายไฟล์ที่ซ้ำกันไปยังโฟลเดอร์ใหม่ หากคุณย้ายไปยังโฟลเดอร์ที่อยู่นอกโฟลเดอร์เดิม 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