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 για την αφαίρεση διπλότυπων αρχείων, θα αναρτηθεί σύντομα και θα σας αρέσει να διαβάζετε.