Jak w systemie Linux usunąć foldery o określonej nazwie, które są zagnieżdżone głęboko w hierarchii folderów?
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
Jakiego polecenia systemu Linux powinienem użyć z folderu nadrzędnego?
Odpowiedzi:
Jeśli katalog docelowy jest pusty, użyj funkcji znajdź, filtruj tylko z katalogami, filtruj według nazwy, wykonaj rmdir:
Jeśli chcesz rekurencyjnie usunąć jego zawartość, zamień
-exec rmdir {} \;
na-delete
lub-prune -exec rm -rf {} \;
. Inne odpowiedzi zawierają szczegóły dotyczące tych wersji.źródło
{} \;
robi?{}
można odczytać jako „dla każdego pasującego pliku / folderu” - tj. zastępuje każdy „znaleziony” plik / folder.\;
jest zakończeniem-exec
klauzuli.-prune
flagi do odpowiedzi zgodnie z sugestią @David Grayson. Bez tegofind
nadal będzie próbował odwiedzić brakujący folder i ostatecznie zakończy pracę z kodem błędu, który może np. Zawieść kompilację Dockera.Użyj znajdź jako nazwę „a” i wykonaj rm, aby usunąć te nazwane zgodnie z własnymi życzeniami, w następujący sposób:
Przetestuj go najpierw, używając ls do wyświetlenia:
Aby upewnić się, że usuwa to tylko katalogi, a nie zwykłe pliki, użyj argumentu „-type d” (zgodnie z sugestią w komentarzach):
„{}” Jest podstawieniem dla każdego znalezionego pliku „a” - polecenie exec jest wykonywane na każdym znalezionym pliku.
źródło
1/2/a/3/4
, co może nie być zamierzone, więc +1 dla rekomendacji, aby najpierw przetestować ...echo {}
najpierw przetestować, zamiastls {}
node_modules/
.find . -name a -type d -exec rm -rf {} \;
i działało, chociaż drukowanofind: ‘./subdir/subdir/a’: No such file or directory
dla każdego usuniętego katalogu.To również działa - usunie wszystkie foldery o nazwie „a” i ich zawartość:
źródło
find/rm
.find . -name a -exec rm -rf {} \;
, find ulegnie awarii, gdy spróbuje wejść do tego katalogu w celu wyszukania większej liczby elementów, powodując błąd, taki jakfind: '1/2/3/a': No such file or directory
.illegal option --t
. Musiałam też przejść do katalogu do przeszukania ( stackoverflow.com/questions/25840713/... )rm -rf `find . -type d -name a`
.Aby usunąć wszystkie katalogi o tej samej nazwie
foo
, uruchom:W pozostałych odpowiedziach brakuje ważnej rzeczy:
-prune
opcji. Bez tego-prune
GNU find usunie katalog o pasującej nazwie, a następnie spróbuje do niego powtórzyć, aby znaleźć więcej pasujących katalogów.-prune
Opcja informuje go nie rekursja do katalogu, który dopasowany warunki.źródło
Skończyło się na tym, że chciałem usunąć moje
node_modules
foldery przed wykonaniem kopii zapasowej mojej pracy w toku za pomocąrsync
. Kluczowym wymaganiem jest to, żenode_modules
folder może być zagnieżdżony, więc potrzebujesz tej-prune
opcji.Najpierw uruchomiłem to, aby wizualnie zweryfikować foldery do usunięcia:
Następnie uruchomiłem to, aby usunąć je wszystkie:
Dzięki pistache
źródło
sh #!/bin/bash echo "Found node_modules: "; find -type d -name node_modules -prune; read -r -p "Do you really want to delete all directories? [yes/no] " input; if [ ! $input != "yes" ]; then find -type d -name node_modules -prune -exec rm -rf {} \;; fi
Powinien załatwić sprawę. OSTRZEŻENIE, jeśli przypadkowo wpompujesz
.
lub/
doxargs rm -Rf
całego komputera zostanie usunięty bez możliwości jego odzyskania, co wymaga ponownej instalacji systemu operacyjnego.źródło
Miałem ponad 100 plików typu
powyższe odpowiedzi nie działają dla mnie
ale poniższe polecenie pomogło mi.
dałem
-type
jak.
tak to kasuje zarówno pliki i foldery, które rozpoczyna się zlog-
i
rm -rf
usuwa foldery rekurencyjnie, nawet jeśli zawiera pliki.jeśli chcesz tylko foldery
same pliki
źródło
Łącząc wiele odpowiedzi, oto polecenie, które działa zarówno w systemie Linux, jak i MacOS
źródło
Inny:
źródło
-delete
nie usuwa niepustych folderów.To polecenie działa dla mnie. Wykonuje swoją pracę rekurencyjnie
. - bieżący folder
„node_modules” - nazwa folderu
źródło
znajdź ścieżkę / do / folderów -maxdepth 1 -name "my_ *" -type d -delete
źródło