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

76

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

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

rm **/*.orig

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

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

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

  • rm -rv *.orig

  • rm -R *\.orig

JD Исаакс
источник
Взгляните на 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 {} \;
user2038042
источник
3
Какая польза от использования -delete?
Муру
@muru Полагаю, вы получите запрос для каждого файла, если вы удалите -rf.
Питер
@ Питер не обязательно. Даже тогда так? Ответ использует -rf, и findимеет -ok.
Муру
@muru выглядит так: -удаленный не удаляет папки
Андрей Караиванский
@AndriiKaraivanskyi, если удаление не удалось, это делает.
Муру
1

Я удалил все файлы, которые начинаются с .nfs000000000, как это

rm .nfs000000000*
Тарас Васькив
источник