Удаление неработающей ссылки Unix - PullRequest
3 голосов
/ 03 сентября 2010

Я хочу удалить неработающую ссылку, но перед этим хочу подтвердить, присутствует ли файл ссылки в каталоге.Давайте назовем ссылку A:

if [ -a A ] then 
  print 'ya A is ther'
fi

Но если A неработающая ссылка, то как я могу проверить?

Ответы [ 3 ]

4 голосов
/ 03 сентября 2010

find -L -type l находит неработающие символические ссылки.Сначала убедитесь, что файл не является каталогом или символической ссылкой на каталог с test -d (если это каталог, find вернется в него).Таким образом:

is_broken_symlink () {
    case $1 in -*) set "./$1";; esac
    ! [ -d "$1" ] && [ -n "$(find -L "$1" -type l)" ]
}

Это склонно к гонке, если связь между вызовом на test и вызовом на find меняется.Альтернативный подход - сказать find не повторять.

is_broken_symlink () {
    case $1 in -*) set "./$1";; esac
    [ -n "$(find -L "$1" -type l -print -o -prune)" ]
}
2 голосов
/ 03 сентября 2010
if readlink -qe A > /dev/null; then
    echo "link works"
fi
0 голосов
/ 03 сентября 2010
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...