przystajnik

Terminal pogryzł człowieka: rdfind

Kiedy po wielomiesięcznym upychaniu gdzie się da „ważnych plików” przychodzi do ich sprzątnięcia, niejednemu użytkowniki przechodzi ochota na takowe po wstępnym przeglądnięciu już samej struktury katalogu domowego. Dziesiątki katalogów „ważne”, „pilne”, setki kopii, każdy plik z wykrzyknikiem, kopie bezpieczeństwa w 20 wariantach i tak dalej. Tak, trzeba wykazać się żelazną samodyscypliną aby nie śmiecić lub uprzątnąć to co się narobiło. Ale w zmaganiach z narosłą stertą plików nie jesteśmy osamotnieni, taki niepozorny rdfind na początku pozwoli uporać się nam z duplikatami.

Choć wyszukiwanie takich samych plików nie brzmi skomplikowanie, to rdfind przeprowadza tę operację wzorowo. W podanej przez nas lokalizacji każdy z plików o takiej samej objętości jest porównywany na kilku etapach. Najpierw sprawdzane są pierwsze bajty takiego znaleziska, potem ostatnie, jeżeli są takie same, obliczana jest suma md5 lub sha1. Na tym nie koniec – rdfind spróbuje również ustalić który z plików jest „oryginałem” (na podstawie jego położenia w systemie plików i kolejności znalezienia).

A co rdfind zrobi po ustaleniu powiązań pomiędzy plikami? Domyślnie generuje on plik results.txt, gdzie czarno na białym (lub na odwrót) ujrzymy listę takich samych plików posortowaną wg. oryginałów i kopii. Każdy z plików jest dodatkowo opisany:

DUPTYPE_UNKNOWN some internal error
DUPTYPE_FIRST_OCCURRENCE the file that is considered to be the original.
DUPTYPE_WITHIN_SAME_TREE files in the same tree (found when processing the directory in the same input argument as the original)
DUPTYPE_OUTSIDE_TREE the file is found during processing another input argument than the original.

Jeżeli wiemy, czego możemy się spodziewać po przefiltrowaniu określonych katalogów, możemy skorzystać z parametrów -deleteduplicates i -makesymlink / -makehardlink. Pierwszy z nich wykasuje duplikaty, kolejne utworzą miękkie lub twarde dowiązanie duplikatów do oryginału (czyli zachowamy nazwy).

Oczywiście lista opcji programu jest o wiele bardziej bogatsza:

$# rdfind 

usage:
rdfind [options] directory1 directory2 ...

 Finds duplicate files in directories, and takes appropriate actions
Directories listed first are ranked higher, meaning that if a
file is found on several places, the file found in the directory first
 encountered on the command line is kept, and the others are considered duplicate.
 options are (default choice within parantheses) 

 -makesymlinks      true |(false) replace duplicate files with symbolic links
 -makehardlinks     true |(false) replace duplicate files with hard links
 -deleteduplicates  true |(false) delete duplicate files
 -ignoreempty      (true)| false  ignore empty files
 -removeidentinode (true)| false  ignore files with nonunique device and inode
 -makeresultsfile  (true)| false  makes a results file
 -outputname  name  sets the results file name to "name" (default results.txt)
 -followsymlinks    true |(false) follow symlinks
 -dryrun|-n         true |(false) print to stdout instead of changing anything
 -checksum          (md5)| sha1   checksum type
 -sleep              Xms          sleep for X milliseconds between file reads.
                                  Default is 0. Currently, only a few values
                                  are supported; 0,1-5,10,25,50,100

Nie trudno uzmysłowić sobie scenariusze wykorzystania tego narzędzia. Wspomniane oczyszczanie katalogów z duplikatów to doskonały przedwstęp do np. tworzenia z nich kopii zapasowych, itp.

I co najważniejsze – program występuje w głównych repozytoriach większości dystrybucji, stąd też nie powinniśmy mieć problemu z jego zainstalowaniem. 

Post navigation

Translate »