Назад | Перейти на главную страницу

Как составить список каталогов, на которые нет символических ссылок в каталоге?

Я пытаюсь выполнить очистку, похожую на этот вопрос. В ОС UNIX я хочу удалить каталоги, которые не связаны символически в данном каталоге.

например У меня есть сценарий развертывания, который создает структуру каталогов для такого приложения:

1.0-201103071711/
1.0-201103071718/
1.0-201103071729/
current -> /opt/myapps/fooapp/1.0-201103071729/

Я хочу создать сценарий, который удалит в этом каталоге каталоги, которые не являются «текущим» каталогом. Спасибо!

Этот фрагмент Bash найдет каталоги, с которыми не связаны каталоги. Он также найдет битые ссылки.

for f in *; do (($(find -L -maxdepth 1 -samefile "$f" 2>/dev/null | wc -l) == 1)) && echo "found: $f"; done

Он не смотрит за пределы текущего каталога или в подкаталоги.

Обязательно тщательно его протестируйте.

Как упоминалось в упомянутом вопросе, официального способа сделать это не существует. В качестве альтернативы варианту Денниса я предлагаю следующий ужасный взлом. Не забудьте также тщательно протестировать. Я бы рекомендовал заменить -exec часть с ls пока вы не убедитесь, что это работает.

touch current;find . -maxdepth 1 -type d -mmin +2 -exec rm -rf {} \;

Он будет проверять только текущий каталог. По сути, он касается каталога, связанного с 'текущим', а затем удаляет все, что время изменения превышает две минуты. Если другие каталоги некоторое время не касались, вы можете увеличить таймер на -mmin, чтобы случайно не уничтожить нужный каталог. Очевидно, это возможно только в том случае, если вы не против изменить метку времени в текущем каталоге.


- Кристофер Карел