git clean -Xdf
С заглавными буквами -X
,git clean
только удаляет файлы, соответствующие .gitignore
.
С -d
git clean
также удаляет целые каталоги, соответствующие .gitignore
.
С помощью -f
git clean
фактически удалит данные, а не предупредит вас. Будьте осторожны. Могут быть другие вещи (, такие как личная direnv
конфигурация ), которые .gitignored
по другим причинам, поэтому убедитесь, что вы всегда понимаете, что будет делать эта команда, прежде чем она будет запущена.
Особая благодарность @Kusalananda за то, что поделился git clean
.
В качестве альтернативы, если у вас есть, скажем, папка для зависимостей, которая включает каталоги с символическими ссылками, и вы не хотите git clean
рекурсивно удалять все внутри этих каталогов, вы можете использовать эту более длинную форму:
git ls-files --others --ignored --exclude-standard --directory | head -c -1 | tr '\n' '\0' | xargs -0 -r rm -r
git ls-files
с этими опциями выводит те же каталоги, что и git clean -Xdn
, но больше машиночитаемых -.
head -c -1
обрезает завершающий байт новой строки.
tr '\n' '\0'
переводит все новые строки в NUL
s.
xargs -0 -r rm -r
удаляет файлы и каталоги. -0
делает NUL
разделителем. -r
заставляет пропускать пустой ввод (предупреждение :это не -переносимое расширение GNU ).
Согласно предложению @Stéphane Chazelas, в документации Texinfo(info -n emacs locate
)не указан оператор повторения для регулярного выражения emacs
в отличие от регулярного выражения Emacs . Наоборот , тип регулярного выражения grep
поддерживает его с синтаксисом, которого я ожидал. А именно,
locate --regex --regextype grep 'krita-[0-9]\{1,2\}\.kra$
решает проблему.