Jak mogę usunąć wszystkie pliki .swp ze wszystkich moich podkatalogów pod Linuksem?
Jak mogę usunąć wszystkie pliki .swp ze wszystkich moich podkatalogów pod Linuksem?
Odpowiedzi:
Usuń wszystkie pliki * .swp z bieżącego katalogu, użyj find
polecenia w jednej z następujących form:
find . -name \*.swp -type f -delete
-delete
Opcja oznacza, znaleźć będzie bezpośrednio usunąć pliki ogłoszeń. To najlepiej pasuje do rzeczywistego pytania OP.
Za -type f
pomocą metody find można przetwarzać tylko pliki.
find . -name \*.swp -type f -exec rm -f {} \;
find . -name \*.swp -type f -exec rm -f {} +
Opcja -exec
pozwala 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 xargs
jest używane z bardziej złożonych poleceń dla pliku niż jest to możliwe w przypadku -exec
. Ta opcja -print0
mówi, find
aby oddzielić dopasowania z ASCII NULL zamiast nowej linii, i -0
mó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 find
więcej szczegółów i przykładów.
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
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 f
opcję „znaleźć”. Jeśli masz tylko katalogi, powyższe polecenie nie usunie ich głośno.