locate :постфиксный оператор повторения регулярного выражения не работает с --emacs типа регулярного выражения

git clean -Xdf

С заглавными буквами -X,git cleanтолько удаляет файлы, соответствующие .gitignore.

С -dgit cleanтакже удаляет целые каталоги, соответствующие .gitignore.

С помощью -fgit 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'переводит все новые строки в NULs.

xargs -0 -r rm -rудаляет файлы и каталоги. -0делает NULразделителем. -rзаставляет пропускать пустой ввод (предупреждение :это не -переносимое расширение GNU ).

1
16.11.2020, 13:18
1 ответ

Согласно предложению @Stéphane Chazelas, в документации Texinfo(info -n emacs locate)не указан оператор повторения для регулярного выражения emacsв отличие от регулярного выражения Emacs . Наоборот , тип регулярного выражения grepподдерживает его с синтаксисом, которого я ожидал. А именно,

locate --regex --regextype grep 'krita-[0-9]\{1,2\}\.kra$

решает проблему.

0
18.03.2021, 22:49

Теги

Похожие вопросы