Jak szybko usuwać pliki i katalogi za pomocą terminala (powłoka bash) [zamknięte]

331

Z okna terminala:

Kiedy używam rmpolecenia, może on tylko usuwać pliki.
Kiedy używam rmdirpolecenia, usuwa tylko puste foldery.

Jeśli mam katalog zagnieżdżony z plikami i folderami w folderach z plikami i tak dalej, czy istnieje jakiś sposób, aby usunąć wszystkie pliki i foldery bez wszystkich męczących poleceń?

Jeśli to robi różnicę, używam powłoki mac bash z terminala, a nie Microsoft DOS lub Linux.

baduker
źródło
Na wypadek gdybyś chciał przywrócić pliki w przyszłości, nie używaj „rm” w takich przypadkach. Użyj „rm-trash”: github.com/nateshmbhat/rm-trash
Natesh bhat

Odpowiedzi:

759
rm -rf some_dir

-r „rekurencyjna” -f „wymusza” (pomija komunikaty potwierdzające)

Bądź ostrożny!

Jim Lewis
źródło
26
+1 i ciesz się, że dodałeś „Uważaj!” część… zdecydowanie komenda „Sawzall”, która może szybko zmienić dobry dzień w zły… jeśli zostanie użyta beztrosko.
itsmatt
5
jak nie rób "# rm -rf /" pożałujesz, że:
DarthVader
1
@itsmatt: Wiesz, co mówią ... daj komuś Sawzall, a nagle każdy problem wygląda jak godziny zabawy!
Jim Lewis,
164
Na komputerze Mac? Zrób to zamiast tego: brew install trashnastępnie trash -rf some_dirSpowoduje to przeniesienie niechcianego katalogu do kosza zamiast znikania stylu Prestige w eterze. ( źródło )
zakdances
4
Podejście „śmieci” jest świetne!
anopres
59
rm -rf *

Usuwałby wszystko (foldery i pliki) z bieżącego katalogu.

Ale bądź ostrożny! Wykonaj to polecenie tylko wtedy, gdy masz absolutną pewność, że znajdujesz się we właściwym katalogu.

Prine
źródło
17
rm -rf jest bardzo ryzykownym poleceniem, zawsze należy zachować ostrożność i określić folder do usunięcia.
eomeroff
8
Co powiesz na bieganie, ls -R *aby zobaczyć, co zostanie usunięterm -rf *
Hammad Khan
Działa mi to dobrze, dzięki.
Monica Hübner,
14

Tak jest. -rRozwiązaniem opowiada rmsię R ecursive i usunąć całą hierarchię zakorzenionego w jego argumentacji; innymi słowy, jeśli otrzyma katalog, usunie całą jego zawartość, a następnie wykona to, co faktycznie jest rmdir.

Pozostałe dwie opcje, które powinieneś znać to -ii -f. -ioznacza i nteractive; wyświetla rmmonit o usunięcie każdego pliku. -foznacza f Orce; idzie dalej i usuwa wszystko bez pytania. -ijest bezpieczniejszy, ale -fszybszy; używaj go tylko wtedy, gdy masz absolutną pewność, że usuwasz właściwą rzecz. Możesz określić je za pomocą -rlub nie; to niezależne ustawienie.

I jak zwykle możesz łączyć przełączniki: rm -r -ijest po prostu rm -riirm -r -f jest rm -rf.

Zauważ też, że to, czego się uczysz, dotyczy bashkażdego systemu operacyjnego Unix: OS X, Linux, FreeBSD itp. W rzeczywistości rmskładnia jest taka sama w prawie każdej powłoce w każdym systemie operacyjnym Unix. OS X, pod maską, to naprawdę system uniksowy BSD.

Antal Spector-Zabusky
źródło
1
Chociaż wszystkie wspomniane powyżej opcje są standardowe wśród wszystkich wymienionych odmian uniksowych, istnieją również pewne różnice. Na przykład OS X (ale nie Linux) ma "rm -d", który usuwa pliki lub puste katalogi. Mimo to +1 za to, że OS X jest wewnętrznie BSD.
David Gelhar,
To prawda, że podzbiór POSIX jest (prawie) gwarantowany, aby działał konsekwentnie w Unixen, ale wszystko poza tym, co może, ale nie musi.
Antal Spector-Zabusky
2

Więc szukałem sposobu na usunięcie wszystkich plików w katalogu oprócz niektórych katalogów i plików, które chciałem zachować. Po wielu poszukiwaniach wymyśliłem sposób, aby to zrobić za pomocą funkcji find.

find -E . -regex './(dir1|dir2|dir3)' -and -type d -prune -o -print -exec rm -rf {} \;

Zasadniczo używa wyrażenia regularnego, aby wybrać katalogi do wykluczenia z wyników, a następnie usuwa pozostałe pliki. Chciałem go tutaj umieścić, na wypadek, gdyby ktoś inny tego potrzebował.

msantoro12
źródło