Usuń pasujące pliki ze wszystkich podkatalogów

76

Jak mogę usunąć wszystkie pliki .swp ze wszystkich moich podkatalogów pod Linuksem?

Alex
źródło
3
Nie zapomnij spojrzeć na programy takie jak trash-cli, abyś mógł cofnąć usunięcie zamiast używać rm. code.google.com/p/trash-cli (we wszystkich poniższych odpowiedziach po prostu zamienisz „rm” na „kosz”).

Odpowiedzi:

136

Usuń wszystkie pliki * .swp z bieżącego katalogu, użyj findpolecenia w jednej z następujących form:

  • find . -name \*.swp -type f -delete

    -deleteOpcja oznacza, znaleźć będzie bezpośrednio usunąć pliki ogłoszeń. To najlepiej pasuje do rzeczywistego pytania OP.

    Za -type fpomocą metody find można przetwarzać tylko pliki.

  • find . -name \*.swp -type f -exec rm -f {} \;
    find . -name \*.swp -type f -exec rm -f {} +

    Opcja -execpozwala znaleźć, aby wykonać dowolne polecenie dla pliku. Pierwszy wariant uruchamia polecenie raz na plik, a drugi uruchamia jak najmniej poleceń, zastępując {}możliwie jak najwięcej parametrów.

  • find . -name \*.swp -type f -print0 | xargs -0 rm -f

    Pipowanie danych wyjściowych xargsjest używane z bardziej złożonych poleceń dla pliku niż jest to możliwe w przypadku -exec. Ta opcja -print0mówi, findaby oddzielić dopasowania z ASCII NULL zamiast nowej linii, i -0mówi, xargsże należy oczekiwać danych wejściowych oddzielonych przez NULL. Dzięki temu konstrukcja potoku jest bezpieczna dla nazw plików zawierających białe znaki.

Zobacz man findwięcej szczegółów i przykładów.

Lachlan Roche
źródło
16

find . -name '*.swp' -delete

Po znalezieniu samodzielnego usunięcia usuń wszelkie ryzyko związane z miejscem osadzonym w nazwie pliku ... Aby zwiększyć bezpieczeństwo, rozważ dodanie -type ftylko dla plików.

Zeograd
źródło
4
find /path -type f -name "*.swp" -delete
find /path -type f -name "*.swp" -exec rm -f "{}" +;

bash 4.0

shopt -s globstar
rm -f /path/**/*.swp
użytkownik31894
źródło
2

Do wyszukiwania w moim katalogu domowym (i używania GNU „find” i „xargs”) użyłbym:

find $HOME -name '*.swp' -print0 | xargs -0 rm -f

Użycie „ -print0” i „ -0” oznacza, że ​​nazwy będą rozdzielane znakami ASCII NUL „\ 0”, a to będzie obsługiwać ścieżki plików ze spacjami itp. W nazwach. Jeśli uważasz, że możesz mieć katalogi (lub pliki urządzeń, FIFO lub inne nie-pliki) w katalogu kończącym się na „.swp”, możesz dodać -type fopcję „znaleźć”. Jeśli masz tylko katalogi, powyższe polecenie nie usunie ich głośno.

Jonathan Leffler
źródło