Dla tego typu struktury katalogów:
/config/filegroups/filegroupA/files/fileA1.txt
/config/filegroups/filegroupA/files/fileA2.txt
/config/filegroups/filegroupB/files/fileB1.txt
/config/filegroups/filegroupB/files/fileB2.txt
...
Wiem, że mogę użyć rm -rf /config/filesgroups
do usunięcia folderu nadrzędnego i wszystkich podfolderów ...
ale chcę usunąć tylko /filegroupA
, /filegroupB
itp, a nie usuwać/config/filegroups
rm -rf /config/filegroups/filegroups{A,B}
?bash
nie zawiera „.” foldery w rozwinięciu nazwy ścieżki. Które mogą być pożądane lub nie. Ja mamshopt -s dotglob
w.bashrc
to naprawić. Na marginesie, że ktoś może się przydać;).rm -rf /*
zrobi;) --- poważnie nie rób tegoOdpowiedzi:
Jeśli chcesz usunąć tylko katalogi (i dowiązania symboliczne do katalogów), pozostawiając
/config/filegroups
nietknięte pliki , możesz użyć ukośnika końcowego:Jeśli chcesz usunąć katalogi z nazwami zaczynającymi się
.
również od, zakładając, że masz dość niedawne bash, powinieneś użyć opcji powłoki dotglob:źródło
Spowoduje to usunięcie wszystkich plików i katalogów, w
/config/filegroups
tym „ukrytych” plików i katalogów (nazwy zaczynające się od.
).Jeśli nazwy plików lub katalogów zawierają spacje, musisz to zrobić w następujący sposób:
Bonus: możesz najpierw sprawdzić, co chcesz usunąć w ten sposób:
Jeśli chcesz zachować określone pliki lub katalogi, możesz to zrobić w następujący sposób:
źródło
find
„s-delete
opcję?-delete
odmawia usunięcia niepustych katalogów.-maxdepth
zastępuje-depth
, co jest potrzebne-delete
do usunięcia niepustych katalogów. Bez tego-maxdepth
nie możesz łatwo zobaczyć, które katalogi zostaną usunięte, ponieważ zawiera także listę plików w tych katalogach. Nieużywanie-maxdepth
oznacza również, że nie możesz łatwo używać takich filtrów-name
. Ponadto-delete
usuwa katalogi, usuwając najpierw wszystkie znajdujące się w nim obiekty, co może zająć dużo czasu, jeśli jest to duże i głębokie drzewo.Wolę używać
find
z-exec
, co sprawiłoby, że Twoje połączenie wyglądałoby mniej więcej tak:źródło
Jeśli jesteś już w folderze, możesz po prostu wpisać
rm -rf ./**
Więc:
Jest to wzorzec globalny, który usuwa wszystkie podfoldery ze ścieżki lokalnej.
./
odnosząc się do folderu lokalnego ... i**
wszystkich folderów poniżej ...źródło
rm -rf ./*
, z tym wyjątkiem, że prawdopodobnie otrzymasz komunikaty diagnostyczne dotyczące „Brak takiego pliku lub katalogu”, jeśli nie używasz-f
polecenia (ponieważ najwyższy katalog zostanie rekurencyjnie usunięty przed przetworzeniem jego zawartości przezrm
).