Заметки обо всем

Удаление всех директорий кроме одной при помощи команды find

При деплое приложения нужно было, чтобы очищалась папка с картинками, кроме одной папки, картинки которой использовались для админки и файла .gitignore.

В результате, команда выглядела так:

sudo find ./storage/app/* -type d -name admin -prune -o -exec rm -rf {} \;

То есть мы находим все директории в нужной папке, затем исключаем папку admin и для всех остальных выполняем удаление.

Немного по ключам:

-type d выбирает директории.
-name temp -prune говорит найти директорию/файл с именем admin и исключить ее.
-o логическое "или". То есть дальше мы работаем со всеми осташимися директориями.
-exec rm -rf {} \; Для которых рекурсивно выполняем удаление.

Вообще find — очень мощная команда и стоит уметь ей пользоваться хотя бы в базовом масшатабе. Например, вот так можно задавать параметры доступа отдельно для папок и файлов:

sudo find . -type f -exec chmod 664 {} \;
sudo find . -type d -exec chmod 775 {} \;