Как удалить все файлы, которые соответствуют шаблону?


76

Когда я возвращаюсь в Mercurial, он оставляет несколько .origфайлов. Я хотел бы иметь возможность запустить команду, чтобы удалить их все.

Я нашел несколько источников, которые говорят, чтобы бежать:

rm **/*.orig

Но это дает мне сообщение:

rm: невозможно удалить `* / .orig ': такого файла или каталога нет

Я также попробовал:

  • rm -rv *.orig

  • rm -R *\.orig


Взгляните на superuser.com/a/699287/92334
Lu55

Ответы:


149

Используйте findкоманду (с осторожностью!)

find . -name '*.orig' #-delete

Я закомментировал команду удаления, но как только вы довольны тем, что она соответствует, просто удалите #из строки, и она должна удалить все эти файлы.


Это работает рекурсивно?
Фрэнк Барсенас

2
@FrankBarcenas Да - найти все делает рекурсивно. Если вы хотите ограничить то, как это работает, вы можете поиграть с аргументами -maxdepthили -mindepth.
Оли

6
Определенно оставьте -deleteв конце флагов. find . -delete -name '*.orig'проигнорирует фильтр и закроет весь ваш каталог.
Майкл

1
@ Майкл, да. Я уже решил проблему сgit clean -fdx
kyb

1
@kamal Я бы, вероятно, все еще использовал find, но с предикатами -regexили -iregex. Парсинг имен файлов (когда вы их обматываете) иногда бывает трудно сделать безопасно.
Оли

6

«find» имеет несколько очень продвинутых методов для поиска по всем или текущим каталогам и файлам rm.

find ./ -name ".orig" -exec rm -rf {} \;

3
Какая польза от использования -delete?
Муру

@muru Полагаю, вы получите запрос для каждого файла, если вы удалите -rf.
Питер

@ Питер не обязательно. Даже тогда так? Ответ использует -rf, и findимеет -ok.
Муру

@muru выглядит так: -удаленный не удаляет папки
Андрей Караиванский

@AndriiKaraivanskyi, если удаление не удалось, это делает.
Муру

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.