Duplikált filek megkeresése és törlése

A rendszerünkön előfordulhat, hogy esetekben egy-egy filet több helyen is őrzünk. Ez lehet idegesítő és foglalhat akár értékes tárterületet is. Így érdemes ellene tenni. A továbbiakban egy olyan scriptet akarok megmutatni, ami hasznos lehet e feladat megoldásához.

A script maga fontos, hogy a rendszeren semmi féle változást nem csinál. A script igazából egy másik scriptet generál. Ez lesz az amibe kigyűjti, párosával (vagy amennyi létezik ugyan abból az állományból) a filek elérési útját, de úgy, hogy egy törlő scriptet hozzon létre. A kigenerált scriptet editálnunk kell, hisz a comment (hozzászólás) jelet ki kell szednünk azon sorok elől, amit törlésre ítélünk (ez ilyen biztonsági megoldás is, véletlenül elindítva se tegyünk kárt). A megszerkesztett törlő script ezek után pedig már futtatható, és a lefutását követően már meg is szabadultunk a felesleges másolatoktól.

Fontos kiemelni, hogy ez a pár sornyi utasítás több mint aminek látszik. Nem egyszerűen az azonos nevű fileket keresi, sőt még nem is az azonos méretűeket. Minden fileről elkészíti az MD5 összegét, ami ugye teljesen azonosít egy filet. Ezzel az eljárással lehet más neve a filenak, akkor is megtalálja az duplikált állományokat, ráadásul hibás találat is teljesen kizárható, mert két filenak csak akkor egyezhet meg az MD5 összege, ha teljesen egyformák.

A kiadandó utasítás így néz ki:
OUTF=rem-duplicates.sh; echo "#! /bin/sh" > $OUTF; find "$@" -type f -print0 | xargs -0 -n1 md5sum | sort --key=1,32 | uniq -w 32 -d --all-repeated=separate | sed -r 's/^[0-9a-f]*( )*//;s/([^a-zA-Z0-9./_-])/\\\1/g;s/(.+)/#rm \1/' >> $OUTF; chmod a+x $OUTF; ls -l $OUTF

A jobb olvhatóság kedvéért kedvéért:

OUTF=rem-duplicates.sh;
echo "#! /bin/sh" > $OUTF;
find "$@" -type f -print0 |
xargs -0 -n1 md5sum |
sort --key=1,32 | uniq -w 32 -d --all-repeated=separate |
sed -r 's/^[0-9a-f]*( )*//; s/([^a-zA-Z0-9./_-])/\\\1/g;s/(.+)/#rm \1/' >> $OUTF;
chmod a+x $OUTF; ls -l $OUTF

A valószínüleg hosszú futást követően, ehhez hasonló filet fog létrehozni azon a helyen, ahonnan kiadtuk a parancsot:

#! /bin/sh
#rm ./gdc2001/113-1303_IMG.JPG
#rm ./reppulilta/gdc2001/113-1303_IMG.JPG

#rm ./lissabon/01-01-2001/108-0883_IMG.JPG
#rm ./kuvat\ reppulilta/lissabon/01-01-2001/108-0883_IMG.JPG

#rm ./gdc2001/113-1328_IMG.JPG
#rm ./kuvat\ reppulilta/gdc2001/113-1328_IMG.JPG

Duplikált filek megkeresése és törlése” bejegyzéshez 2 hozzászólás

  1. Igen, mac-en bitos nem fog lefutni. Ez tipikusan linuxos gepeken fut le. Kis korrigalassal lehet hogy mac-en is menne, a kulonbozo flagezesek es opcionalis lehetosegekben kulonboznek az utasitasok. Szoval ez neked buko!

    De ha megnezed Linux/unix kategoriaban van, Applebe direkt nem is raktam!

Hozzászólás a(z) MiszterX bejegyzéshez Válasz megszakítása

Az e-mail címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük