ค้นหาเว็บไซต์

fdupes - เครื่องมือบรรทัดคำสั่งเพื่อค้นหาและลบไฟล์ที่ซ้ำกันใน Linux


เป็นข้อกำหนดทั่วไปในการค้นหาและแทนที่ไฟล์ที่ซ้ำกันสำหรับผู้ใช้คอมพิวเตอร์ส่วนใหญ่ การค้นหาและลบไฟล์ที่ซ้ำกันเป็นงานที่น่าเบื่อซึ่งต้องใช้เวลาและความอดทน การค้นหาไฟล์ที่ซ้ำกันอาจเป็นเรื่องง่ายมากหากเครื่องของคุณขับเคลื่อนโดย GNU/Linux ต้องขอบคุณยูทิลิตี้ 'fdupes'

fdupes คืออะไร?

Fdupes เป็นโปรแกรมอรรถประโยชน์ Linux ที่เขียนโดย Adrian Lopez ในภาษาโปรแกรม C ที่เผยแพร่ภายใต้ใบอนุญาต MIT แอปพลิเคชันสามารถค้นหาไฟล์ที่ซ้ำกันในชุดไดเร็กทอรีและไดเร็กทอรีย่อยที่กำหนด Fdupes จดจำรายการที่ซ้ำกันโดยการเปรียบเทียบลายเซ็น MD5 ของไฟล์ ตามด้วยการเปรียบเทียบแบบไบต์ต่อไบต์ มีตัวเลือกมากมายที่สามารถส่งผ่านด้วย Fdupes เพื่อแสดงรายการ ลบ และแทนที่ไฟล์ด้วยฮาร์ดลิงก์ไปยังรายการที่ซ้ำกัน

การเปรียบเทียบเริ่มต้นตามลำดับ:

การเปรียบเทียบขนาด > การเปรียบเทียบลายเซ็น MD5 บางส่วน > การเปรียบเทียบลายเซ็น MD5 แบบเต็ม > การเปรียบเทียบแบบไบต์ต่อไบต์

ติดตั้ง fdupes บน Linux

การติดตั้ง fdupes เวอร์ชันล่าสุด (fdupes เวอร์ชัน 1.51) ง่ายดายเหมือนกับการรันคำสั่งบนระบบที่ใช้ Debian เช่น Ubuntu และ Linux Mint

sudo apt-get install fdupes

บนระบบที่ใช้ CentOS/RHEL และ Fedora คุณต้องเปิดพื้นที่เก็บข้อมูล epel เพื่อติดตั้งแพ็คเกจ fdupes

yum install fdupes
dnf install fdupes    [On Fedora 22 onwards]

หมายเหตุ: ตัวจัดการแพ็คเกจเริ่มต้น yum จะถูกแทนที่ด้วย dnf จาก Fedora 22 เป็นต้นไป…

จะใช้คำสั่ง fdupes ได้อย่างไร?

1. เพื่อวัตถุประสงค์ในการสาธิต เรามาสร้างไฟล์ที่ซ้ำกันสองสามไฟล์ภายใต้ไดเร็กทอรี (พูดว่า tecmint) ง่ายๆ ดังนี้:

mkdir /home/"$USER"/Desktop/tecmint && cd /home/"$USER"/Desktop/tecmint && for i in {1..15}; do echo "I Love Tecmint. Tecmint is a very nice community of Linux Users." > tecmint${i}.txt ; done

หลังจากรันคำสั่งด้านบนแล้ว ให้ตรวจสอบว่าไฟล์ที่ซ้ำกันถูกสร้างขึ้นหรือไม่ใช้คำสั่ง ls

$ ls -l

total 60
-rw-r--r-- 1 tecmint tecmint 65 Aug  8 11:22 tecmint10.txt
-rw-r--r-- 1 tecmint tecmint 65 Aug  8 11:22 tecmint11.txt
-rw-r--r-- 1 tecmint tecmint 65 Aug  8 11:22 tecmint12.txt
-rw-r--r-- 1 tecmint tecmint 65 Aug  8 11:22 tecmint13.txt
-rw-r--r-- 1 tecmint tecmint 65 Aug  8 11:22 tecmint14.txt
-rw-r--r-- 1 tecmint tecmint 65 Aug  8 11:22 tecmint15.txt
-rw-r--r-- 1 tecmint tecmint 65 Aug  8 11:22 tecmint1.txt
-rw-r--r-- 1 tecmint tecmint 65 Aug  8 11:22 tecmint2.txt
-rw-r--r-- 1 tecmint tecmint 65 Aug  8 11:22 tecmint3.txt
-rw-r--r-- 1 tecmint tecmint 65 Aug  8 11:22 tecmint4.txt
-rw-r--r-- 1 tecmint tecmint 65 Aug  8 11:22 tecmint5.txt
-rw-r--r-- 1 tecmint tecmint 65 Aug  8 11:22 tecmint6.txt
-rw-r--r-- 1 tecmint tecmint 65 Aug  8 11:22 tecmint7.txt
-rw-r--r-- 1 tecmint tecmint 65 Aug  8 11:22 tecmint8.txt
-rw-r--r-- 1 tecmint tecmint 65 Aug  8 11:22 tecmint9.txt

สคริปต์ด้านบนสร้างไฟล์ 15 ไฟล์ ได้แก่ tecmint1.txt, tecmint2.txt…tecmint15.txt และทุกไฟล์จะมีข้อมูลเดียวกัน นั่นคือ

"I Love Tecmint. Tecmint is a very nice community of Linux Users."

2. ตอนนี้ให้ค้นหาไฟล์ที่ซ้ำกันภายในโฟลเดอร์ tecmint

$ fdupes /home/$USER/Desktop/tecmint 

/home/tecmint/Desktop/tecmint/tecmint13.txt
/home/tecmint/Desktop/tecmint/tecmint8.txt
/home/tecmint/Desktop/tecmint/tecmint11.txt
/home/tecmint/Desktop/tecmint/tecmint3.txt
/home/tecmint/Desktop/tecmint/tecmint4.txt
/home/tecmint/Desktop/tecmint/tecmint6.txt
/home/tecmint/Desktop/tecmint/tecmint7.txt
/home/tecmint/Desktop/tecmint/tecmint9.txt
/home/tecmint/Desktop/tecmint/tecmint10.txt
/home/tecmint/Desktop/tecmint/tecmint2.txt
/home/tecmint/Desktop/tecmint/tecmint5.txt
/home/tecmint/Desktop/tecmint/tecmint14.txt
/home/tecmint/Desktop/tecmint/tecmint1.txt
/home/tecmint/Desktop/tecmint/tecmint15.txt
/home/tecmint/Desktop/tecmint/tecmint12.txt

3. ค้นหารายการที่ซ้ำกันซ้ำๆ ในทุกไดเร็กทอรี รวมถึงไดเร็กทอรีย่อยโดยใช้ตัวเลือก -r

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

$ fdupes -r /home

Progress [37780/54747] 69%

4. ดูขนาดของรายการที่ซ้ำกันที่พบในโฟลเดอร์โดยใช้ตัวเลือก -S

$ fdupes -S /home/$USER/Desktop/tecmint

65 bytes each:                          
/home/tecmint/Desktop/tecmint/tecmint13.txt
/home/tecmint/Desktop/tecmint/tecmint8.txt
/home/tecmint/Desktop/tecmint/tecmint11.txt
/home/tecmint/Desktop/tecmint/tecmint3.txt
/home/tecmint/Desktop/tecmint/tecmint4.txt
/home/tecmint/Desktop/tecmint/tecmint6.txt
/home/tecmint/Desktop/tecmint/tecmint7.txt
/home/tecmint/Desktop/tecmint/tecmint9.txt
/home/tecmint/Desktop/tecmint/tecmint10.txt
/home/tecmint/Desktop/tecmint/tecmint2.txt
/home/tecmint/Desktop/tecmint/tecmint5.txt
/home/tecmint/Desktop/tecmint/tecmint14.txt
/home/tecmint/Desktop/tecmint/tecmint1.txt
/home/tecmint/Desktop/tecmint/tecmint15.txt
/home/tecmint/Desktop/tecmint/tecmint12.txt

5. คุณสามารถดูขนาดของไฟล์ที่ซ้ำกันสำหรับทุกไดเรกทอรีและไดเรกทอรีย่อยที่พบภายในโดยใช้ตัวเลือก -S และ -r ในเวลาเดียวกัน , เช่น:

$ fdupes -Sr /home/avi/Desktop/

65 bytes each:                          
/home/tecmint/Desktop/tecmint/tecmint13.txt
/home/tecmint/Desktop/tecmint/tecmint8.txt
/home/tecmint/Desktop/tecmint/tecmint11.txt
/home/tecmint/Desktop/tecmint/tecmint3.txt
/home/tecmint/Desktop/tecmint/tecmint4.txt
/home/tecmint/Desktop/tecmint/tecmint6.txt
/home/tecmint/Desktop/tecmint/tecmint7.txt
/home/tecmint/Desktop/tecmint/tecmint9.txt
/home/tecmint/Desktop/tecmint/tecmint10.txt
/home/tecmint/Desktop/tecmint/tecmint2.txt
/home/tecmint/Desktop/tecmint/tecmint5.txt
/home/tecmint/Desktop/tecmint/tecmint14.txt
/home/tecmint/Desktop/tecmint/tecmint1.txt
/home/tecmint/Desktop/tecmint/tecmint15.txt
/home/tecmint/Desktop/tecmint/tecmint12.txt

107 bytes each:
/home/tecmint/Desktop/resume_files/r-csc.html
/home/tecmint/Desktop/resume_files/fc.html

6. นอกเหนือจากการค้นหาในโฟลเดอร์เดียวหรือทุกโฟลเดอร์แบบวนซ้ำ คุณสามารถเลือกเลือกเป็นสองโฟลเดอร์หรือสามโฟลเดอร์ได้ตามต้องการ ไม่ต้องพูดถึง คุณสามารถใช้ตัวเลือก -S และ/หรือ -r ได้ หากจำเป็น

fdupes /home/avi/Desktop/ /home/avi/Templates/

7. หากต้องการลบไฟล์ที่ซ้ำกันในขณะที่เก็บสำเนาไว้ คุณสามารถใช้ตัวเลือก '-d' ควรใช้ความระมัดระวังเป็นพิเศษในขณะที่ใช้ตัวเลือกนี้ ไม่เช่นนั้นคุณอาจสูญเสียไฟล์/ข้อมูลที่จำเป็น และทราบว่ากระบวนการนี้ไม่สามารถกู้คืนได้

$ fdupes -d /home/$USER/Desktop/tecmint

[1] /home/tecmint/Desktop/tecmint/tecmint13.txt
[2] /home/tecmint/Desktop/tecmint/tecmint8.txt
[3] /home/tecmint/Desktop/tecmint/tecmint11.txt
[4] /home/tecmint/Desktop/tecmint/tecmint3.txt
[5] /home/tecmint/Desktop/tecmint/tecmint4.txt
[6] /home/tecmint/Desktop/tecmint/tecmint6.txt
[7] /home/tecmint/Desktop/tecmint/tecmint7.txt
[8] /home/tecmint/Desktop/tecmint/tecmint9.txt
[9] /home/tecmint/Desktop/tecmint/tecmint10.txt
[10] /home/tecmint/Desktop/tecmint/tecmint2.txt
[11] /home/tecmint/Desktop/tecmint/tecmint5.txt
[12] /home/tecmint/Desktop/tecmint/tecmint14.txt
[13] /home/tecmint/Desktop/tecmint/tecmint1.txt
[14] /home/tecmint/Desktop/tecmint/tecmint15.txt
[15] /home/tecmint/Desktop/tecmint/tecmint12.txt

Set 1 of 1, preserve files [1 - 15, all]: 

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

Set 1 of 1, preserve files [1 - 15, all]: 2-15

   [-] /home/tecmint/Desktop/tecmint/tecmint13.txt
   [+] /home/tecmint/Desktop/tecmint/tecmint8.txt
   [-] /home/tecmint/Desktop/tecmint/tecmint11.txt
   [-] /home/tecmint/Desktop/tecmint/tecmint3.txt
   [-] /home/tecmint/Desktop/tecmint/tecmint4.txt
   [-] /home/tecmint/Desktop/tecmint/tecmint6.txt
   [-] /home/tecmint/Desktop/tecmint/tecmint7.txt
   [-] /home/tecmint/Desktop/tecmint/tecmint9.txt
   [-] /home/tecmint/Desktop/tecmint/tecmint10.txt
   [-] /home/tecmint/Desktop/tecmint/tecmint2.txt
   [-] /home/tecmint/Desktop/tecmint/tecmint5.txt
   [-] /home/tecmint/Desktop/tecmint/tecmint14.txt
   [-] /home/tecmint/Desktop/tecmint/tecmint1.txt
   [-] /home/tecmint/Desktop/tecmint/tecmint15.txt
   [-] /home/tecmint/Desktop/tecmint/tecmint12.txt

8. จากมุมมองด้านความปลอดภัย คุณอาจต้องการพิมพ์ผลลัพธ์ของ 'fdupes' ลงในไฟล์ จากนั้นตรวจสอบไฟล์ข้อความเพื่อตัดสินใจว่าจะลบไฟล์ใด ซึ่งจะช่วยลดโอกาสที่ไฟล์ของคุณจะถูกลบโดยไม่ตั้งใจ คุณอาจทำ:

fdupes -Sr /home > /home/fdupes.txt

หมายเหตุ: คุณสามารถแทนที่ '/home' ด้วยโฟลเดอร์ที่คุณต้องการได้ นอกจากนี้ ให้ใช้ตัวเลือก '-r' และ '-S' หากคุณต้องการค้นหาแบบเรียกซ้ำและขนาดการพิมพ์ ตามลำดับ

9. คุณอาจละไฟล์แรกจากการจับคู่แต่ละชุดได้โดยใช้ตัวเลือก '-f'

รายการไฟล์แรกของไดเร็กทอรี

$ ls -l /home/$USER/Desktop/tecmint

total 20
-rw-r--r-- 1 tecmint tecmint 65 Aug  8 11:22 tecmint9 (3rd copy).txt
-rw-r--r-- 1 tecmint tecmint 65 Aug  8 11:22 tecmint9 (4th copy).txt
-rw-r--r-- 1 tecmint tecmint 65 Aug  8 11:22 tecmint9 (another copy).txt
-rw-r--r-- 1 tecmint tecmint 65 Aug  8 11:22 tecmint9 (copy).txt
-rw-r--r-- 1 tecmint tecmint 65 Aug  8 11:22 tecmint9.txt

แล้วละเว้นไฟล์แรกจากการจับคู่แต่ละชุด

$ fdupes -f /home/$USER/Desktop/tecmint

/home/tecmint/Desktop/tecmint9 (copy).txt
/home/tecmint/Desktop/tecmint9 (3rd copy).txt
/home/tecmint/Desktop/tecmint9 (another copy).txt
/home/tecmint/Desktop/tecmint9 (4th copy).txt

10. ตรวจสอบเวอร์ชันที่ติดตั้งของ fdupes

$ fdupes --version

fdupes 1.51

11. หากคุณต้องการความช่วยเหลือเกี่ยวกับ fdupes คุณสามารถใช้สวิตช์ '-h'

$ fdupes -h

Usage: fdupes [options] DIRECTORY...

 -r --recurse     	for every directory given follow subdirectories
                  	encountered within
 -R --recurse:    	for each directory given after this option follow
                  	subdirectories encountered within (note the ':' at
                  	the end of the option, manpage for more details)
 -s --symlinks    	follow symlinks
 -H --hardlinks   	normally, when two or more files point to the same
                  	disk area they are treated as non-duplicates; this
                  	option will change this behavior
 -n --noempty     	exclude zero-length files from consideration
 -A --nohidden    	exclude hidden files from consideration
 -f --omitfirst   	omit the first file in each set of matches
 -1 --sameline    	list each set of matches on a single line
 -S --size        	show size of duplicate files
 -m --summarize   	summarize dupe information
 -q --quiet       	hide progress indicator
 -d --delete      	prompt user for files to preserve and delete all
                  	others; important: under particular circumstances,
                  	data may be lost when using this option together
                  	with -s or --symlinks, or when specifying a
                  	particular directory more than once; refer to the
                  	fdupes documentation for additional information
 -N --noprompt    	together with --delete, preserve the first file in
                  	each set of duplicates and delete the rest without
                  	prompting the user
 -v --version     	display fdupes version
 -h --help        	display this help message

นั่นคือทั้งหมดตอนนี้ แจ้งให้เราทราบว่าคุณค้นหาและลบไฟล์ที่ซ้ำกันใน Linux จนถึงขณะนี้ได้อย่างไร และบอกความคิดเห็นของคุณเกี่ยวกับยูทิลิตี้นี้ให้ฉันทราบด้วย ใส่ข้อเสนอแนะอันมีค่าของคุณในส่วนความคิดเห็นด้านล่างและอย่าลืมกดไลค์/แชร์เราและช่วยให้เราแพร่กระจาย

ฉันกำลังทำงานกับโปรแกรมอรรถประโยชน์อื่นที่เรียกว่า fslint เพื่อลบไฟล์ที่ซ้ำกัน และจะโพสต์เร็วๆ นี้ และทุกคนจะชอบอ่าน