Usunąłeś (prawie) cały katalog domowy!
rm -r something rekurencyjnie usuwa pliki i katalogi w / pod czymś ; zawiedzie tylko na elementach, których nie ma uprawnień do usunięcia, albo dlatego, że są własnością innego użytkownika (np. root), albo dlatego, że są w użyciu (np. montaż GVFS).
Jeśli nie dodasz -f(jak w, rm -rf something), otrzymasz coś takiego:
rm: remove write-protected regular file ‘something’?
rm: descend into write-protected directory ‘something’?
W tym momencie możesz przerwać, a następnie prawdopodobnie zdasz sobie sprawę, że wykonałeś niewłaściwe polecenie.
Sugestie społeczności dotyczące unikania takich wypadków
Uwaga: wiki społeczności, każdy może się przyłączyć.
W przypadku kilku plików użyj -iopcji, aby uzyskać potwierdzenie usunięcia plików lub katalogów:
$ rm -ri something/
rm: remove regular file ‘something/file~’? y
rm: descend into directory ‘something’? y
rm: remove regular file ‘something/file’? y
rm: remove directory ‘something’? y
W przypadku usuwania z bieżącego katalogu poprzedź go znakiem, ./aby uniknąć pomyłkowego usunięcia innej lokalizacji:
$ cd something
$ rm -v ./*~
removed ‘./file~’
Powyższe miało na celu wykazanie użycia ./. Jeśli istnieje podkatalog, możesz oczywiście również użyć rm -v something/*~. Uwaga : nie sądzę, że rm ./.*usuwa wszystkie ukryte pliki w bieżącym katalogu. Zobacz to pytanie o awarię serwera o aby uzyskać obejścia dotyczące globowania ukrytych plików.
Przenieś zamiast usuń: Zamiast usuwać pliki rekurencyjnie, przywykłem do przenoszenia plików, których chcę się pozbyć gdzieś indziej, zanim je ostatecznie usunę. Jeśli coś poszło nie tak, łatwo je przywrócić.
mv -b SOURCE DEST
Użyj find(ewentualnie z grep), aby wyświetlić podgląd, jeśli chcesz rekurencyjnie usuwać wybrane pliki. Powinieneś spróbować uczynić to rzadkim zjawiskiem, ale jeśli musisz ...
findbez argumentów rekurencyjnie wyświetla listę wszystkich plików / katalogów w bieżącym. Powinieneś spróbować spojrzeć w góręman find dowiedzieć się, jak uczynić go selektywnym (skarbiec), ale jeśli nie chcesz się tym przejmować, możesz po prostu użyć znajomego grepdo filtrowania plików, które chcesz usunąć.
- Załóżmy, że jestem hakerem jądra uber-l33t i przeszkadza mi kilka KB „przykładowych” plików w moim drzewie źródłowym; Chcę usunąć wszystkie pliki zawierające to w nazwie. Więc piszę
find | grep example, co daje mi te 20 plików. Wygląda to dobrze, więc teraz idę i usuwam te dokładne pliki, wraz z rm -vpełnymi poprzednio wymienionymi wyjściami, za pośrednictwem xargs:
znajdź | przykład grep | xargs rm -v
co daje mi ten wynik. Takie podglądanie zapobiega problemom, gdy powiedzmy, że popełnisz literówkę i piszesz samplezamiast example.
Powyższe rozwiązanie nie powinno być stosowane, jeśli możesz mieć nazwy plików zawierające spacje, znaki tabulacji, znaki nowej linii lub cudzysłowy ( "lub '), ponieważ doprowadzi to xargsdo niepowodzenia lub spowoduje podanie rmniekompletnych nazw plików, co w najgorszym przypadku może skończyć się usunięciem niewłaściwego akta. Bezpiecznym sposobem na wykonanie powyższych czynności jest zrobienie tego wszystkiego za pomocą findoperatorów i działań.
Poniżej zostaną wyświetlone wszystkie pliki zawierające to słowo example
find . -name "*example*"
Jeśli ta lista to pliki, które chcesz usunąć, użyj -execakcji, aby przekazać pliki rm.
find . -name "*example*" -exec rm -v {} +
Zobacz Korzystanie z Znajdź, aby uzyskać dodatkową pomoc dotyczącą używania find.