Я пытаюсь выполнить очистку, похожую на этот вопрос. В ОС 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
, чтобы случайно не уничтожить нужный каталог. Очевидно, это возможно только в том случае, если вы не против изменить метку времени в текущем каталоге.
- Кристофер Карел