Odpowiedzi:
Ćwicz bezpieczną obsługę komputera. Po prostu przejdź o jeden poziom wyżej w hierarchii i nie używaj wyrażeń wieloznacznych:
cd ..; rm -rf -- <dir-to-remove>
Dwie kreski --
powiedzieć rm
, że <dir-to-remove>
nie jest to opcja wiersza polecenia, nawet jeśli zaczyna się od myślnika.
rm ./
możesz przypadkowo wpisać, rm . /
co może być katastrofą.
Usunie wszystkie pliki / katalogi poniżej bieżącego.
find -mindepth 1 -delete
Jeśli chcesz zrobić to samo z innym katalogiem, którego nazwę masz, możesz go po prostu nazwać
find <name-of-directory> -mindepth 1 -delete
Jeśli chcesz usunąć nie tylko jego podkatalogi i pliki, ale także sam katalog, pomiń -mindepth 1
. Zrób to bez, -delete
aby uzyskać listę rzeczy, które zostaną usunięte.
-mindepth 1
jeśli określasz katalog ( find <name-of-directory> -mindepth 1 -delete
). W przeciwnym razie Johannes ma rację, nie usunie bieżącego katalogu roboczego (jeśli jest używany find -delete
).
find -mindepth 1 -delete
ale mam illegal option -- m
ale działał świetnie, kiedy usunięto opcję mindepth find . -delete
To, co zawsze robię, to pisanie
rm -rf *
a następnie naciśnij ESC- * , a bash rozwinie * do jawnej listy plików i katalogów w bieżącym katalogu roboczym.
Korzyści to:
W rzeczywistości podoba mi się to tak bardzo, że uczyniłem to domyślne zachowanie dla TAB z tym wierszem w .bashrc:
bind TAB:insert-completions
--
w tej odpowiedzi? Muszę powiedzieć, że to podejście jest niesamowite.
Posługiwać się
rm -rf *
Aktualizacja: .
oznacza bieżący katalog, ale nie możemy tego użyć. Wydaje się, że polecenie ma jawne sprawdzenia dla .
i ..
. Zamiast tego użyj symboli wieloznacznych. Ale to może być ryzykowne.
Bezpieczniejszą wersją IMO jest użycie:
rm -ri *
(to monituje o potwierdzenie przed usunięciem każdego pliku / katalogu).
To prawda, że bezpośrednio rm –rf .
usunie wszystko w bieżącym, w tym wszelkie podkatalogi i ich zawartość. Pojedyncza kropka ( .
) oznacza katalog bieżący. uważaj, aby tego nie robić, rm -rf ..
ponieważ podwójna kropka ( ..
) oznacza poprzedni katalog.
Biorąc to pod uwagę, jeśli jesteś podobny do mnie i masz jednocześnie otwartych wiele okien terminala, lepiej bądź bezpieczny i użyj rm -ir .
Spójrzmy na argumenty poleceń, aby zrozumieć, dlaczego.
Po pierwsze, jeśli spojrzysz na stronę podręcznika rm
poleceń ( man rm
pod większością systemów Unix), zauważysz, że –r
oznacza to „rekurencyjne usuwanie zawartości katalogów”. Zatem zrobienie tego w rm -r .
pojedynkę spowodowałoby usunięcie wszystkiego w bieżącym katalogu i wszystkiego poniżej.
W rm –rf .
dodanym -f oznacza „ignoruj nieistniejące pliki, nigdy nie pytaj”. To polecenie usuwa wszystkie pliki i katalogi w bieżącym katalogu i nigdy nie wyświetla monitu o potwierdzenie, że naprawdę chcesz to zrobić. -f
jest szczególnie niebezpieczne, jeśli uruchomisz polecenie jako użytkownik z uprawnieniami, ponieważ możesz usunąć zawartość dowolnego katalogu bez możliwości upewnienia się, że naprawdę tego chcesz.
Na otherhand w że zastępuje środki „prompt przed każdym usunięciu”. Oznacza to, że będziesz miał szansę powiedzieć „oups! Nie o to mi chodzi”, zanim rm z radością usunie wszystkie twoje pliki.rm -ri .
-i
-f
We wczesnych latach sysadmin zrobiłem rm -rf /
w systemie będąc zalogowanym z pełnymi uprawnieniami (root). W rezultacie minęły dwa dni na przywrócenie systemu z kopii zapasowych. Dlatego teraz zatrudniam rm -ri
.
upewnij się, że jesteś we właściwym katalogu
rm -rf *
Uważam, że ta odpowiedź jest lepsza:
/unix/12593/how-to-remove-all-the-files-in-a-directory
Jeśli wywoływany jest katalog najwyższego poziomu
images
, uruchomrm -r images/*
. Używa to operatora globalnego powłoki*
do uruchamianiarm -r
na każdym pliku lub katalogu w obrazach.
w zasadzie przechodzisz o jeden poziom w górę, a następnie mówisz usuń wszystko w katalogu X. W ten sposób nadal określasz, który folder powinien mieć usuniętą zawartość, co jest bezpieczniejsze niż zwykłe powiedzenie „usuń wszystko tutaj”, przy jednoczesnym zachowaniu oryginalnego folderu (co czasami chcesz, ponieważ nie możesz lub po prostu nie chcesz aby zmodyfikować istniejące uprawnienia folderu)