4

я пытаюсь удалить в GNU / Linux все папки в другой папке, которые начинаются с "." (точка), для этого я использую утилиту поиска, вот что у меня есть:

find . -iname ^\..* -exec rm -rf {} \;

но это ничего не делает :(. Я уже проверил регулярное выражение и работает хорошо. Любая помощь, пожалуйста?

Большое спасибо за ваше время.

4 ответа4

5

find использует синтаксис globbing, и вы можете использовать -type d чтобы найти только каталоги:

find . -type d -name '.?*' | vim -

Вы должны быть предельно осторожны, когда используете глобальные выражения или регулярные выражения для поиска .hidden файлов, так как вы можете легко их найти . и удалите всю папку, или, что еще хуже, соответствует .. и вы удалите всю родительскую папку. Рассмотрим последствия следующей команды:

/home/someuser bash$ rm -rf .*
1

-name и -iname используют глобусы, а не регулярные выражения. Попробуйте вместо этого -regex или -iregex .

0
find . -type d -iname ".*" -not -iname "." -not -iname ".."
0

Если zsh является опцией, вы можете просто использовать: print **/.*(/) Или rm конечно :)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .