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


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.


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 {} \;

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*
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.