At jsem ruzne zkousel na testovacich datech, vypada to, ze nefunguje navrhovana verze:for i in `sha256sum ./* | awk '{ print $1}' | uniq -d -w64 `; do rm -vf `sha256sum ./* | uniq -Dw64 | grep $i | tail +2 | awk '{print $2}'` ;done
Zkousel jsem ruzna testovaci data, ve slozce s 20 soubory bylo nekolik souboru se stejnym obsahem, ale jinym jmenem, jmena souboru jen z alfa-numerickych znaku. Po spusteni nekolikrat zadny ze souboru smazan nebyl.
Urcite tam ma byt
tail +2 ? U nekterych souboru to haze chybu:
tail: cannot open '+2' for reading: No such file or directory
A vypada to, ze chybu hodi tolikrat. kolik je tam ruznych obsahu v mnozine duplicitnich souboru, nehlede na celkovy pocet duplicitnich souboru. tail -2 vybere 2 posledni radky z vyctu, ale tail +2 ? Na textovy soubor mi tail +2 nefunguje, tail -2 vypise posledni dva radky. Verze s tail -2 vymaze nektere duplicitni soubory, ale ne vsechny.
I kdyz se mi puvodne navrzeny kod nepodarilo zprovoznit, snazil jsem se jednotlive veci pochopit a nejak vymyslet vlastni prikaz. Cimz samozrejme dekuji za naznak reseni. A toto je muj vysledek:for X in `sha256sum ./* | sort -r | uniq -d -w64 | cut -d "/" -f 2` ; do echo "Mazu duplicitni soubor ${X}" ; rm ${X} ; done
Kod, ktery jsem navrhnul, tak v pripade souboru se stejnym hashem ale jinymi jmeny, vypise abecedne posledni jmeno z listu souborutotozneho obsahu (jinych jmen jinym jmenem), a ten soubor smaze. Od kazde skupiny duplicitnich souboru s unikatnim hashem smaze ten soubor abecedne posledni.
Takze kdyz ma stejny hash-obsah vic nez dva soubory, tak se ten prikaz musi spoustet vicekrat, a to tak dlouho, dokud skript hlasi, ze neco maze (maze jen abecedne posledni soubor). Neprakticke, ale zatim neodladeno. Kdyz skript nic nehlasi-nemaze, tak uz se duplicitni hash nevyskytuje, kazdy hash je unikatni.
Podminkou pro fungovani meho skriptu ale jsou slusne nazvy souboru (bez mezer ci specialnich znaku), jinak si nejsem jisty, co to udela, tak s obecnym pouzitim pozor. V pripade adresaru sha256sum zahlasi, ze hash nepocita - sha256sum: ./Test: Is a directory. A do adresaru se skript nekouka, maze duplicitni soubory jen v danem adresari a v dane urovni podle vseho (ne soubor v adresari a jeho duplicita v podadresari).