fdupes - Ένα εργαλείο γραμμής εντολών για εύρεση και διαγραφή διπλών αρχείων στο Linux


Είναι μια κοινή απαίτηση για την εύρεση και αντικατάσταση διπλών αρχείων για τους περισσότερους χρήστες υπολογιστών. Η εύρεση και η αφαίρεση διπλών αρχείων είναι μια κουραστική δουλειά που απαιτεί χρόνο και υπομονή. Η εύρεση διπλών αρχείων μπορεί να είναι πολύ εύκολη εάν το μηχάνημά σας τροφοδοτείται από GNU/Linux, χάρη στο βοηθητικό πρόγραμμα «fdupes».

Τι είναι το fdupes;

Το Fdupes είναι ένα βοηθητικό πρόγραμμα Linux γραμμένο από τον Adrian Lopez σε γλώσσα προγραμματισμού C που κυκλοφορεί με άδεια MIT. Η εφαρμογή μπορεί να βρει διπλά αρχεία στο δεδομένο σύνολο καταλόγων και υποκαταλόγων. Τα Fdupes αναγνωρίζουν τα διπλότυπα συγκρίνοντας την υπογραφή MD5 των αρχείων που ακολουθείται από μια σύγκριση byte-to-byte. Πολλές επιλογές μπορούν να περάσουν με το Fdupes για λίστα, διαγραφή και αντικατάσταση των αρχείων με σκληρούς συνδέσμους σε διπλότυπα.

Η σύγκριση ξεκινά με τη σειρά:

σύγκριση μεγεθών > Μερική σύγκριση υπογραφών MD5 > Πλήρης σύγκριση υπογραφών MD5 > Σύγκριση byte-to-byte.

Εγκαταστήστε το 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; και επίσης πείτε μου τη γνώμη σας για αυτό το βοηθητικό πρόγραμμα. Καταχωρίστε τα πολύτιμα σχόλιά σας στην παρακάτω ενότητα σχολίων και μην ξεχάσετε να μας κάνετε like/sharing και να μας βοηθήσετε να διαδοθούμε.

Εργάζομαι σε ένα άλλο βοηθητικό πρόγραμμα που ονομάζεται fslint για την αφαίρεση διπλότυπων αρχείων, θα αναρτηθεί σύντομα και θα σας αρέσει να διαβάζετε.