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