2010-02-22 13:58:05 +0000 2010-02-22 13:58:05 +0000
84
84

Usuń pasujące pliki we wszystkich podkatalogach

Jak mogę usunąć wszystkie pliki .swp we wszystkich moich podkatalogach pod Linuksem?

Odpowiedzi (5)

147
147
147
2010-02-22 13:59:15 +0000

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.

16
16
16
2010-02-22 14:07:23 +0000

find . -name '*.swp' -delete

Po znalezieniu usuwanie samo w sobie usuwa wszelkie ryzyko dla spacji w nazwie pliku, … Dla dodatkowego bezpieczeństwa rozważ również dodanie -type f tylko dla plików.

4
4
4
2010-02-22 14:11:50 +0000
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
2
2
2
2010-02-22 14:04:52 +0000

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.

0
0
0
2019-11-17 04:04:10 +0000

Jeśli chcesz usunąć wszystkie pliki ze wszystkich podfolderów, możesz użyć podanej komendy,

$ find . -name \* -type f -delete