Як видалити всі файли, що відповідають шаблону?


76

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

Я знайшов деякі джерела, які говорять про запуск:

rm **/*.orig

Але це дає мені повідомлення:

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

Я також спробував:

  • rm -rv *.orig

  • rm -R *\.orig


Погляньте на superuser.com/a/699287/92334
Lu55

Відповіді:


148

Використовуйте findкоманду (обережно!)

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

Я прокоментував команду delete, але як тільки ви задоволені тим, що вона відповідає, просто видаліть #рядок і вона повинна видалити всі ці файли.


Це працює рекурсивно?
Франк Барсенас

2
@FrankBarcenas Так - знайти все робить рекурсивно. Якщо ви хочете обмежити, як це працює, ви можете пограти з аргументами -maxdepthабо -mindepth.
Олі

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

1
@Michael, так. Я вже вирішив проблему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, схоже, -delete не видаляє папки
Андрій Караїванський

@AndriiKaraivanskyi, якщо видалення не вдалося, це зробити.
муру

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.