usuń podfoldery bez usuwania folderu nadrzędnego

15

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/filesgroupsdo usunięcia folderu nadrzędnego i wszystkich podfolderów ...

ale chcę usunąć tylko /filegroupA, /filegroupBitp, a nie usuwać/config/filegroups

BaltoStar
źródło
13
Czy jest jakiś problem z użyciem rm -rf / config / filesgroups / *?
dsmsk80,
3
A może nawet rm -rf /config/filegroups/filegroups{A,B}?
Drav Sloan,
@dsumsky Domyślnie bashnie zawiera „.” foldery w rozwinięciu nazwy ścieżki. Które mogą być pożądane lub nie. Ja mam shopt -s dotglobw .bashrcto naprawić. Na marginesie, że ktoś może się przydać;).
Miroslav Koškár,
Czy coś dla ciebie działało? Jeśli tak, czy miałbyś coś przeciwko zaakceptowaniu odpowiedzi, aby pomóc innym (podobnie jak ja), którzy chcą zrobić to samo?
Mawg mówi o przywróceniu Moniki
rm -rf /*zrobi;) --- poważnie nie rób tego
Muhammad Umer

Odpowiedzi:

28
rm -rf /config/filegroups/*

Jeśli chcesz usunąć tylko katalogi (i dowiązania symboliczne do katalogów), pozostawiając /config/filegroupsnietknięte pliki , możesz użyć ukośnika końcowego:

rm -rf /config/filegroups/*/

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:

shopt -s dotglob
rm -rf /config/filegroups/*/
shopt -u dotglob
zła
źródło
i proszę nie, że to nie zadziała dla rm -rf "/ config / filegroups / *"
Ilya Yevlampiev
5

Spowoduje to usunięcie wszystkich plików i katalogów, w /config/filegroupstym „ukrytych” plików i katalogów (nazwy zaczynające się od .).

find /config/filegroups -mindepth 1 -maxdepth 1 | xargs rm -rf

Jeśli nazwy plików lub katalogów zawierają spacje, musisz to zrobić w następujący sposób:

find /config/filegroups -mindepth 1 -maxdepth 1 -print0 | xargs -0 rm -rf

Bonus: możesz najpierw sprawdzić, co chcesz usunąć w ten sposób:

find /config/filegroups -mindepth 1 -maxdepth 1

Jeśli chcesz zachować określone pliki lub katalogi, możesz to zrobić w następujący sposób:

find /config/filegroups -mindepth 1 -maxdepth 1 -not -name "keep"
lesmana
źródło
Czy jest jakiś powód, aby nie używać find„s -deleteopcję?
evilsoup
4
-deleteodmawia usunięcia niepustych katalogów. -maxdepthzastępuje -depth, co jest potrzebne -deletedo usunięcia niepustych katalogów. Bez tego -maxdepthnie możesz łatwo zobaczyć, które katalogi zostaną usunięte, ponieważ zawiera także listę plików w tych katalogach. Nieużywanie -maxdepthoznacza również, że nie możesz łatwo używać takich filtrów -name. Ponadto -deleteusuwa 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.
lesmana
4

Wolę używać findz -exec, co sprawiłoby, że Twoje połączenie wyglądałoby mniej więcej tak:

find /config/filegroups/ -maxdepth 1 -mindepth 1 -type d -exec rm -rf {} \;
Panthro
źródło
-2

Jeśli jesteś już w folderze, możesz po prostu wpisać rm -rf ./**

Więc:

cd /config/filesgroups
rm -rf ./**

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 ...

Mantisimo
źródło
1
Który folder i dlaczego `**` `
RalfFriedl
1
Byłoby to dokładnie to samo rm -rf ./*, z tym wyjątkiem, że prawdopodobnie otrzymasz komunikaty diagnostyczne dotyczące „Brak takiego pliku lub katalogu”, jeśli nie używasz -fpolecenia (ponieważ najwyższy katalog zostanie rekurencyjnie usunięty przed przetworzeniem jego zawartości przez rm).
Kusalananda