Jak usunąć wszystkie pliki pasujące do wzorca?

76

Kiedy przywracam w Mercurial, pozostawia kilka .origplików. Chciałbym móc uruchomić polecenie usunięcia ich wszystkich.

Znalazłem kilka źródeł, które mówią, aby uruchomić:

rm **/*.orig

Ale to daje mi wiadomość:

rm: nie można usunąć `* / .orig ': Nie ma takiego pliku ani katalogu

Próbowałem też:

  • rm -rv *.orig

  • rm -R *\.orig

JD Isaacks
źródło

Odpowiedzi:

148

Użyj findpolecenia (ostrożnie!)

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

Skomentowałem polecenie usuwania, ale gdy będziesz zadowolony z tego, co pasuje, po prostu usuń #wiersz z linii i powinien usunąć wszystkie te pliki.

Oli
źródło
Czy to działa rekurencyjnie?
Frank Barcenas
2
@FrankBarcenas Tak - find robi wszystko rekurencyjnie. Jeśli chcesz ograniczyć sposób działania, możesz grać argumentami -maxdepthlub -mindepth.
Oli
6
Zdecydowanie zostaw -deletena końcu flagi. find . -delete -name '*.orig'zignoruje filtr i zamknie cały katalog.
Michael,
1
@Michael, tak. Rozwiązałem już problem zgit clean -fdx
kyb
1
@kamal Prawdopodobnie nadal używałbym find, ale z jego -regexlub -iregexpredykatami. Parsowanie nazw plików (gdy je przesyłasz) może być czasami trudne do wykonania.
Oli
6

„find” ma kilka bardzo zaawansowanych technik przeszukiwania wszystkich lub bieżących katalogów i plików rm.

find ./ -name ".orig" -exec rm -rf {} \;
użytkownik2038042
źródło
3
Jaka jest korzyść z używania -delete?
muru,
@muru Przypuszczam, że dostaniesz monit o każdy plik, jeśli usuniesz -rf.
Peter
@Peter niekoniecznie. Nawet wtedy? Odpowiedź używa -rfi findma -ok.
muru
@muru wygląda na to, że -delete nie usuwa folderów
Andrii Karaivanskyi
@AndriiKaraivanskyi, chyba że usunięcie nie powiodło się, robi to.
muru
1

Usunąłem wszystkie pliki, które zaczynają się od .nfs000000000 w ten sposób

rm .nfs000000000*
Taras Vaskiv
źródło