Практическое задание

Эта задача — шаг 21 курса «find и xargs: поиск и массовые операции»

find: вычисти висячие ссылки в ассетах

средне~5 мин

В дереве статики /srv/www/assets после нескольких переездов на разной глубине остались символические ссылки в никуда — их цели давно удалены. Удали все битые ссылки во всём дереве. Рабочие ссылки (на файлы и на каталоги), обычные файлы и каталоги трогать нельзя.

Что потренируешь:
  • find
  • -xtype l
  • символические ссылки
  • битые ссылки
  • -delete

Разбор темы

Символическая ссылка хранит только путь к цели. Если цель удалить или переместить, ссылка остаётся и становится висячей: ls её показывает, а открыть нельзя. У find два теста типа: -type смотрит на сам объект (для любой ссылки это l), а -xtype — на то, что получится после перехода по ссылке. Рабочая ссылка на файл даст f, на каталог — d, а висячей перейти некуда, поэтому она так и остаётся l. Отобрав так только мёртвые ссылки, их удаляют действием -delete, не задевая живые ссылки и сами файлы.

Что проверяется

  1. битых ссылок не осталось
  2. рабочие ссылки на месте
  3. файлы и каталоги целы

Как это выглядит