Como procurar links quebrados em todo o sistema de arquivos local de um servidor?

0

Eu tenho que fazer isso em korn porque o bash não está instalado. Este é o meu script até agora, mas não está funcionando como eu esperava.

cd /
find . -xdev -type d > /tmp/dirlist
export YOURLIST='cat /tmp/dirlist2'
echo START > /tmp/final
for a in $YOURLIST; do
   export MYLIST='ll $a | grep "\->" | awk '{print $11;}''
   echo in dir $a >> /tmp/final
   sleep 5
   for b in $MYLIST; do
      echo 'll $b' 2>&1 > /tmp/result
      grep -q not /tmp/result
      export RC=$?
      if [ "$RC" = "0" ]
      then
         cat /tmp/result >> /tmp/final
      fi
   done
done

Atualmente, está apenas imprimindo diretórios para /tmp/final e ainda está exibindo mensagens não encontradas para stdout estranhamente.

    
por ojblass 08.07.2013 / 18:34

2 respostas

0

Fez uma dupla coisa para simular o que estava faltando na resposta de Glenn

root@system:/ $ cat /bin/checklink
export ORIGINAL='ll $1 | awk '{print $9;}''
export ORIGINALDIR='dirname $ORIGINAL'
export LINKIS='ll $1 | awk '{print $11;}''
export FOUND="0"
if [ -d ${ORIGINALDIR}/${LINKIS} ]
then
     export FOUND="1"
else if [ -f ${ORIGINALDIR}/${LINKIS} ]
     then
       export FOUND="2"
     else if [ -d ${LINKIS} ]
        then
           export FOUND="3"
        else if [ -f ${LINKIS} ]
             then
                export FOUND="4"
             fi
        fi
     fi
fi
if [ "$FOUND" = "0" ]
then
   echo $1 pointing to $LINKIS not found
fi

Seguido por uma chamada para

'find / -xdev -type l -exec checklink {} \;

Sinta-se à vontade para melhorar ...

    
por 08.07.2013 / 20:01
1

find deve ser capaz de encontrar links simbólicos, você não precisa recorrer a parsing ls .

find / -xdev -type l -print |
while IFS= read -r f; do
    target=$(readlink "$f")
    [[ -e "$target" ]] || echo "broken symlink: $f -> $target"
done
    
por 08.07.2013 / 18:46