Hibas szimlink torlese

Csinaltam egy egyszeru scriptet, ami a parameterkent megadott konyvtarbol torli a hibas szimlinkeket. Nyilvan lehetne egyszerubben is, de nekem nagyon megfelel:

find $1 -printf "%f %Y\n" | grep " N" | rm `awk '{print $1}'`

Hozzászólások

apt-get install imake

abban van egy cleanlink nevu script.

egyebkent:


for l in $(find . -type l); do f=$(readlink ${l}); [[ ! -e ${f} ]] && rm -f ${l}; done

A fenti kod feltetelezi, hogy az adott link neveben nincs space.

Hali!
Mert rosszul maslotam be...Valojaban igy nez ki:

find /etc/apache/conf.d -printf "%fSSSSSS%Y\n"  | grep "SSSSSSN" | rm `awk '{print $1}'` 

Vagyis feltetelezi, hogy epelmeju user semmikeppen se rak egy szimlink nevebe 5 spacet :)

Es akkor most tessek behelyettesiteni a "S" betuket szokozzel...
Lehetne persze ket szokoz is, de mar talalkoztam olyan file nevvel, ahol ket szokoz volt.
Az ot az biztos :)

Azt kihasznalva, hogy a symlinkeket "kovetve" csak akkor marad symlink valami, ha nem kovetheto (azaz broken), a kovetkezo megoldas is jo:

find -L "$DIRNAME" -type l -print0 | xargs -r0 rm

A feladat fuggvenyeben elonye vagy hatranya ennek a megoldasnak, hogy azokat a symlinkeket is listazza, amik masik olyan symlinkre mutatnak, (amik masik olyan symlinkre... :) amik aztan broken symlinkek.

Nem feladat volt :) Hosting szerver es egy-egy site torlesekor a script valami erthetetlen okbol csak a konyvtarat torolte, az /etc/apache/conf.d-bol nem torolte a szimlinket. 1000+ site, nehez atnezni, melyik bibis. Szoval elso korben irtam a scriptet es gyorsan megosztottam, hatha valakinek kell ilyesmi. A neten meg csak otletet sem talaltam, csak remenykedtem, hoyg a find-nak van megfelelo kapsoloja.
Jaigen, sztem alkonyvtarakban sem keres, de azt nem probaltam.