Usuń pasujące pliki we wszystkich podkatalogach
Jak mogę usunąć wszystkie pliki .swp we wszystkich moich podkatalogach pod Linuksem?
Usuń wszystkie pliki \s.swp znajdujące się pod bieżącym katalogiem, użyj polecenia find
w jednej z następujących postaci:
find . -name \*.swp -type f -delete
Opcja -delete
oznacza, że find bezpośrednio usunie pasujące pliki. Jest to najlepsze dopasowanie do pytania zadanego przez OP.
Użycie opcji -type f
oznacza, że find będzie tylko przetwarzał pliki.
find . -name \*.swp -type f -exec rm -f {} \;
find . -name \*.swp -type f -exec rm -f {} +
Opcja -exec
pozwala find na wykonanie dowolnego polecenia na pliku. Pierwszy wariant wykona polecenie raz na plik, a drugi wykona jak najmniej poleceń, zastępując {}
jak największą liczbą parametrów.
find . -name \*.swp -type f -print0 | xargs -0 rm -f
Podawanie wyjścia na xargs
jest używane do tworzenia bardziej złożonych poleceń na plik niż jest to możliwe przy użyciu -exec
. Opcja -print0
mówi find
, by oddzielał dopasowania za pomocą ASCII NULL zamiast nowej linii, a -0
mówi xargs
, by oczekiwał wejścia rozdzielonego NULL. Czyni to konstrukcję potoku bezpieczną dla nazw plików zawierających białe znaki.
Zobacz man find
po więcej szczegółów i przykładów.
Do wyszukiwania w moim katalogu domowym (i przy użyciu 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ą ograniczone znakami ASCII NUL ‘i to obsłuży ścieżki do plików z pustymi miejscami itp. w nazwach. Jeśli myślisz, że możesz mieć katalogi (lub pliki urządzeń, lub FIFO, lub inne nie-pliki) pod swoim katalogiem kończącym się na ’.swp’, możesz dodać opcję ‘-type f
’ do ‘find’. Jeśli masz tylko katalogi, powyższa komenda nie usunie ich w sposób głośny.
Jeśli chcesz usunąć wszystkie pliki ze wszystkich podfolderów, możesz użyć podanej komendy,
$ find . -name \* -type f -delete