Jak usunąć pliki za pomocą parametru wielu nazw find?

2

Jak rekurencyjnie usuwać pliki zawierające tyldę w nazwie pliku lub rozszerzeniu?

Na przykład pliki vima o nazwach takich jak .my_file.c.un~?

Używam do tego następującej sekwencji wyszukiwania:

find . -name "*.un~" -o -name "*.swo" -o -name "*.swp" -exec rm -f {} \;

Ale to nie usuwa plików. Nadal działa tylko findwyświetlanie poprawnie listy plików:

./.my_file.c.un~
./.my_file.c.swp
./.file2.c.un~

Również usunięcie ich za pomocą czystego rm -f .my_file.c.un~działa idealnie. Zmiana -exec rm -f {} \;na -deletewciąż nie pomaga.

Anton Kochkov
źródło

Odpowiedzi:

4

Gdy używasz wielu operacji logicznych, musisz pogrupować je w nawiasy, jak poniżej:

find . \( -name "*.un~" -o -name "*.swo" -o -name "*.swp" \) -delete

gdzie musisz odwrócić ukośnik lub zacytować nawiasy kwadratowe ( '(' ... ')'), aby uniknąć parsowania tych znaków specjalnych przez powłokę.

W powyższym przykładzie używam -deletezamiast tego, -exec rm -f {}który automatycznie usuwa plik, więc nie musisz się martwić o pliki ze spacjami, w przeciwnym razie może to być dla ciebie złe .

Aby uzyskać więcej przykładów składni, sprawdź man find.

Zobacz też:

kenorb
źródło