Как я могу рекурсивно удалить все каталоги, имя которых начинается с app-deployment-*
кроме определенного каталога с именем app-deployment-245a578
. I.E. удалите все каталоги, используя глобальное совпадение, но не удаляйте конкретный каталог с известным именем.
rm -rf app-deployment-* # except app-deployment-245a578
find ./ -maxdepth 1 \
-type d \
-name 'app-deployment-*' \
! -name 'app-deployment-245a578' \
-exec echo rm -rf {} +
Пояснения:
-maxdepth 1
означает без рекурсии;-type d
означают поиск только по каталогам;-name 'app-deployment-*'
это шаблон каталогов, которые вы ищете;! -name 'app-deployment-245a578'
это шаблон каталогов, которые вы исключаете из списка результатовexec echo rm -rf
- выполнить команду echo rm -rf
;{} +
- добавить результаты поиска в качестве параметров к команде выше.echo rm -rf dir1 dir2 dir3
.О последнем пункте. Если вы хотите вызывать команду с каждым параметром отдельно (я имею в виду echo rm -rf dir1; echo rm -rf dir2;
) вы должны написать {} \;
(обратите внимание на обратную косую черту) вместо {} +
.
О команде. я пишу echo rm -rf
вместо того rm -rf
из-за всей опасности использования rm -rf
с любым типом сопоставления с образцом. Будьте внимательны и проверьте все перед снятием echo
из команды.
Дальнейшее чтение об опасности паттернов rm +: Творческое использование rm
UPD: стоит отметить, что {} +
должен быть в конце команды, т.е. вы не можете использовать -exec rm {} + -rf