2012-10-23 12 views
54

W systemie Linux w jaki sposób usunąć foldery o określonej nazwie, które są zagnieżdżone głęboko w hierarchii folderów?Jak usunąć foldery o określonej nazwie?

Następujące ścieżki znajdują się w folderze i chciałbym usunąć wszystkie foldery o nazwie a.

1/2/3/a 
1/2/3/b 
10/20/30/a 
10/20/30/b 
100/200/300/a 
100/200/300/b 

Jakie polecenie Linux powinienem użyć z folderu nadrzędnego?

Odpowiedz

67

Jeśli katalog docelowy jest pusty, zastosowanie znaleźć, filtr z filtrem tylko katalogów z nazwy, należy wykonać rmdir:

find -type d -name a -exec rmdir {} \; 

Jeśli chcesz usunąć rekurencyjnie jego zawartość, wymienić -exec rmdir {} \; przez -delete lub -prune -exec rm -rf {} \;. Inne odpowiedzi zawierają szczegółowe informacje o tych wersjach, również je sobie przypisz.

79

Wykorzystanie znaleźć dla nazwy „a” i wykonać rm usunąć te nazwane według życzenia, w następujący sposób:

find . -name a -exec rm -rf {} \; 

testu najpierw za pomocą ls do listy:

find . -name a -exec ls {} \; 

Aby zapewnić powoduje to tylko usunięcie katalogów, a nie zwykłych plików, użycie "-type d" arg (zgodnie z sugestiami w komentarzach):

find . -name a -type d -exec rm -rf {} \; 

"{}" jest podstawieniem dla każdego znalezionego pliku "a" - komenda exec jest wykonywana względem każdego przez podstawienie.

+2

Prawdopodobnie chcesz dodać "-type d" tam po prostu przykryć plik pasujący do tej samej nazwy. –

+1

Należy również pamiętać, że to będzie coś złapać jak '1/2/A/3/4', które nie mogą być przeznaczone, więc +1 do zalecenia, aby przetestować pierwszy ... – twalberg

+2

reco' echo {} 'przetestować go najpierw , zamiast 'ls {}' – charneykaye

10
find ./ -name "FOLDERNAME" | xargs rm -Rf 

Powinien załatwić sprawę. OSTRZEŻENIE, jeśli przypadkowo napompujesz . lub / do xargs rm -Rf Twój cały komputer zostanie usunięty bez opcji odzyskania go, wymagając ponownego zainstalowania systemu operacyjnego.

+0

Ten działa dla mnie, thx! – DarkteK

+0

Och, właśnie to malusieńkie małe ryzyko. Czy to wszystko? Ha ha. Super dzięki za ostrzeżenie. Zdecydowanie popełniłbym błąd w pisaniu. – TinkerTenorSoftwareGuy

21

Działa to również - będzie usunąć wszystkie foldery o nazwie „A” i ich zawartość:

rm -rf `find -type d -name a` 
+4

To jest jedyny, który faktycznie działa. – Buffalo

+0

@Buffalo, jak to możliwe? To defo działa, ale podobnie jak inne. Byłby zaskoczony, gdyby znalazł env, gdzie to działa, ale inni nie podają wszystkich odpowiedzi są zasadniczo "find/rm". – wmorrison365

+2

@ wmorrison365, ponieważ jeśli "znajdziesz. -name a -exec rm -rf {} \; ', find zawiesza się, gdy próbuje wejść do tego katalogu, aby wyszukać więcej elementów, dając błąd, taki jak' find: '1/2/3/a': Brak plik lub katalog'. –

6

miałem więcej niż 100 plików jak

log-12 
log-123 
log-34 
.... 

powyżej odpowiedzi nie działa dla mnie

ale to polecenie pomogło mi.

find . -name "log-*" -exec rm -rf {} \; 

dałem -type jak . więc usuwa oba pliki i foldery, które rozpoczyna się z log-

i rm -rf usuwa foldery rekursywnie nawet ma plików.

jeśli chcesz foldery sam

find -type d -name "log-*" -exec rm -rf {} \; 

same pliki

find -type f -name "log-*" -exec rm -rf {} \; 
6

Aby usunąć wszystkie katalogi z nazwą foo, uruchom:

find -type d -name foo -a -prune -exec rm -rf {} \; 

innych odpowiedzi brakuje ważnym rzecz: opcja -prune. Bez -prune, GNU find usunie katalog z pasującą nazwą, a następnie spróbuje zrekrutować się do niego, aby znaleźć więcej zgodnych katalogów. Opcja -prune mówi, aby nie powracała do katalogu, który byłby zgodny z warunkami.

1

Inny: ścieżka

"-exec rm -rf {} \;" can be replaced by "-delete" 

find -type d -name __pycache__ -delete  # GNU find 
find . -type d -name __pycache__ -delete # POSIX find (e.g. Mac OS X) 
0

find/do/z/foldery -maxdepth 1 -name "my_ *" D -type Usuń nie