Jak usunąć wszystko z katalogu?

25

Jak usunąć wszystko w katalogu, w tym ukryte pliki i katalogi?

W tej chwili używam:

rm -rf *
rm -rf .*
David Smith
źródło
5
Możesz je połączyć z rm -rf .* *.
użytkownik nieznany
2
Możesz przejść o jeden katalog w górę, a następnie uruchomićrm -rf yourdirectory/*
shreyansp,
1
przepraszam, brakowało ukrytej części katalogu. Poprzednie rozwiązanie dla użytkowników obejmuje to
shreyansp,
Ta druga opcja, którą opublikowałeś, jest bardzo niebezpieczna. Będzie pasować do ..katalogu, który usunie wszystko, co znajduje się w katalogu powyżej .
Richard Peterson

Odpowiedzi:

17

Prosty i bezpośredni:

find -delete 

Obejmuje katalogi i ukryte pliki. Przynajmniej gnu-find wie -delete, że findmożesz się różnić.

nieznany użytkownik
źródło
1
Aby uniknąć usunięcia katalogu, użyj find /path -delete -mindepth 1.
orodbhen
@orodbhen: find -delete nie usunie katalogu, w którym uruchomisz polecenie (jak w pytaniu z rm).
użytkownik nieznany
11

Najlepsza odpowiedź brzmi: nie rób tego. Rekurencyjnie usuń sam katalog, a następnie utwórz go ponownie jako pusty katalog. Bardziej niezawodne i łatwiejsze do zrozumienia dla innych osób. Po ponownym utworzeniu katalog może mieć innego właściciela, grupę i uprawnienia. Jeśli są one ważne, bądź ostrożny. Ponadto, jeśli jakieś uruchomione programy mają otwarte uchwyty plików (deskryptory) w katalogu, nie będziesz chciał go usuwać. Jeśli żaden z tych specjalnych przypadków nie ma zastosowania, łatwiej jest usunąć cały katalog.

Chris Quenelle
źródło
7
Jak to jest łatwiejsze. „Uważaj” nie jest odpowiedzią. Nie rozumiem, dlaczego ktoś usuwa katalog i odbudowuje go ponownie.
użytkownik nieznany
Dodałem wyrażenie „jako pusty katalog”, być może jest to bardziej jasne.
Chris Quenelle,
2
Nie, to nie wyjaśnia, dlaczego usuwasz katalog i tworzysz go ponownie. Do rzeczy, które należy wziąć pod uwagę, należy również data / czas utworzenia.
użytkownik nieznany
2
Jeśli ten katalog jest bieżącym katalogiem roboczym jakiegoś procesu, możesz napotkać problemy. Ponadto, jeśli usuniesz katalog, usuniesz informacje o jego uprawnieniach i własności.
8
rm -rf -- * .[!.]* ..?*

Każdy z trzech wzorów rozwija się do siebie, jeśli nie pasuje do niczego, ale nie stanowi to problemu, ponieważ chcemy dopasować wszystko i rm -fzignorować nieistniejące argumenty.

Zauważ, .*że pasowałoby.. .

Gilles „SO- przestań być zły”
źródło
5

Zakładając bash 4+:

shopt -s dotglob
rm -rf -- *
##or:
rm -rf ./*

Po włączeniu dotglob *rozwija się do wszystkich plików i katalogów, nawet tych, które zaczynają się od .- ale nie rozwija się do .i .., dzięki czemu można z niego bezpiecznie korzystać rm.

zła
źródło
2

jeśli jesteś w katalogu:

cd .. && rm -rf dir && mkdir dir && cd dir

Inaczej:

rm -rf /path/to/dir && mkdir /path/to/dir

David Harris
źródło
2

O mój Zsh

rm -rf (.|)*

Ponownie, dotyczy to tylko Zsh.

phunehehe
źródło
2
Lub *(D)( Dkwalifikator glob włącza glob_dotsopcję dla tego wzorca).
Gilles „SO- przestań być zły”
Lub rm -rf {.,}*(w przeciwieństwie do bash, zsh nie obejmuje .i ..do {.,}*, przynajmniej na moim komputerze).
sasha
1

Co powiesz na używanie find. Myślę, że jest to ogólnie dobry wybór, gdy trzeba przekopać podkatalogi.

find . -type f -exec rm {} \;
slashdot
źródło
1
jest przełącznik -delete, więc możesz usuwać katalogi. (przynajmniej w gnu-find).
użytkownik nieznany
nie spowoduje to usunięcia podkatalogów
sasha
-2

Spróbować rm -rf *?*. Spowoduje to usunięcie normalnych i ukrytych plików.

gladimdim
źródło
4
Nie w żadnej znanej mi powłoce.
Gilles „SO- przestań być zły”
masz rację. nie usuwa podkatalogów.
gladimdim
4
Bardziej prawdopodobne jest, że problem *?*nie będzie pasował do plików / katalogów „kropkowych” (chyba że włączyłeś dotglobopcję w bash , GLOB_DOTSopcję w zsh lub równoważną dla jakiejkolwiek powłoki, której używasz).
Chris Johnsen