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

Usuń pasujące pliki we wszystkich podkatalogach

Advertisement

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

Advertisement
Advertisement

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
Advertisement
4
4
2010-02-22 14:11:50 +0000
Advertisement
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
Advertisement
0
0
2019-11-17 04:04:10 +0000
Advertisement

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

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

Pytania pokrewne

6
10
11
5
8
Advertisement
Advertisement