Hledání duplicitních souborů v Linuxu

petrnik 1

Jelikož mi začalo docházet místo v domovském adresáři (1,5 TB), došlo na uklízení. Nejrychlejší (kromě koupě nového disku) se mi zdálo najít duplicitní soubory a zlikvidovat ty. Zkusil jsem fslint, ale po půl hodině běžícího vyhledávání bez výsledku mi došla trpělivost a rozhodl jsem se, že na to půjdu jinak.

„Začnu od největších souborů,” řekl jsem si a napsal:

du -t100000000 |sort -g

Přepínač -t určí minimální velikost souborů a adresářů, která mě zajímá (zde 100MB). Přepínač -g zajistí třídění podle číselné hodnoty namísto abecedního. Za pár minut byl výsledek na světě. Teď jsem procházel výpis odspodu a hledal, kde se objeví stejná velikost dvakrát za sebou. Několik výskytů jsem našel (kopie celých adresářů, které nedoznaly změn), ale brzy jsem se ve výpisu začal ztrácet.

„Chce to zautomatizovat,” napadlo mě a hned jsem se pustil do akce. Výsledkem je tento skriptík:

Spustil jsem ho ve svém adresáři a dostal jsem tento výsledek (jen poslední řádky):

1012940325 ./VEREJNE/stavby
1012940325 ./zbozi/stavby
1026810821 ./programming/datasheet/ppc/e300
1026810821 ./VEREJNE/petr/Veřejné/programming/datasheet/ppc/e300
1026814917 ./programming/datasheet/ppc
1026814917 ./VEREJNE/petr/Veřejné/programming/datasheet/ppc
1053801668 ./programming/datasheet/modem/telit
1053801668 ./VEREJNE/petr/Veřejné/programming/datasheet/modem/telit
1054939207 ./programming/datasheet/modem
1054939207 ./VEREJNE/petr/Veřejné/programming/datasheet/modem
1815673441 ./Hudba/Slovo/Izer
1815673441 ./literatura/mluvené/Izer
2189734823 ./Hudba/classic/Beethoven/Beethoven Complete Symphonies - Karajan [SACD] (6CD)
2189734823 ./Hudba/Stažené soubory/Beethoven Complete Symphonies - Karajan [SACD] (6CD)
4351528960 ./VEREJNE/win/StarWars2/VIDEO_TS
4351528960 ./Videa/EXX/StarWars2/VIDEO_TS
4351537152 ./VEREJNE/win/StarWars2
4351537152 ./Videa/EXX/StarWars2
4564803584 ./VEREJNE/win/StarWars3/VIDEO_TS
4564803584 ./Videa/EXX/StarWars3/VIDEO_TS
4564811776 ./VEREJNE/win/StarWars3
4564811776 ./Videa/EXX/StarWars3
4615038976 ./VEREJNE/win/StarWars1/VIDEO_TS
4615038976 ./Videa/EXX/StarWars1/VIDEO_TS
4615047168 ./VEREJNE/win/StarWars1
4615047168 ./Videa/EXX/StarWars1

No, skoro 20 GB udělá jen těchto posledních pár nálezů.

Závěr

Skript porovnává pouze velikosti souborů a adresářů; z toho vyplývá jeho nedostatek: V případě stejné velikosti různých souborů vyhodnotí duplicitu chybně. Výsledný výpis lze tak použít jen jako návod, kde duplicity hledat.

Pravděpodobnost falešné duplicity samozřejmě prudce roste při vyhledávání menších souborů. Pro snížení výskytu takových chyb jsou ve skriptu použity přepínače –apparent-size, který přiměje du, aby vypsal velikost souboru namísto alokovaného místa na disku, a -b, který zajistí výpis v bajtech, namísto výchozích kB.

Petr

Tags:

One Reply to “Hledání duplicitních souborů v Linuxu”

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.