gedit tworzy ukryte pliki kopii zapasowych kończące się na „~”. Chciałem zrobić rekurencyjne czyszczenie mojego drzewa katalogów.
Polecenie rm *~
usunie wszystkie lokalne pliki kończące się na „~”
Myślałem, rm -r *~ .
że usunę wszystkie pliki z całego drzewa, ale napisałem na maszynie rm -r ~
.
Pojawił się komunikat, że niektóre katalogi nie mogą zostać usunięte i wycofałem się z polecenia. Pytanie brzmi: co usunąłem?
Zauważyłem, że moja konfiguracja Filezilla zniknęła. Czy to polecenie usuwa wszystkie ukryte katalogi z katalogu domowego?
command-line
bash
GUI Junkie
źródło
źródło
-r
chyba że chcę się wszystkiego pozbyć.rm -r *~ .
usunie wszystkie pliki i foldery (w bieżącym katalogu) pasujące*~
lub.
. (.
zostałby zignorowanyrm
jako szczególny wyjątek, ponieważ większość ludzi nie chce rekurencyjnie usuwać bieżącego katalogu.*~
Usuwa wszystkie pliki i katalogi w bieżącym katalogu, które kończą się~
, ale nie pliki i katalogi w podkatalogach bieżącego katalogu. ) Więc nie tego byś chciał. Prawdopodobnie chciałbyś użyćfind
tej-exec
flagi do rekurencyjnego przeglądania drzewa katalogów i nierekurencyjnego usuwania każdego pliku z rozszerzeniem~
.~
znak bez ucieczki (tak\~
:) sprawi, że Bash, ZSH itp. (Wrm
zasadzie polecenie) będą myśleć, że masz na myśli katalog domowy.Odpowiedzi:
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: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
W przypadku kilku plików użyj
-i
opcji, aby uzyskać potwierdzenie usunięcia plików lub katalogów:W przypadku usuwania z bieżącego katalogu poprzedź go znakiem,
./
aby uniknąć pomyłkowego usunięcia innej lokalizacji: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ę, żerm ./.*
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ć.
Użyj
find
(ewentualnie zgrep
), aby wyświetlić podgląd, jeśli chcesz rekurencyjnie usuwać wybrane pliki. Powinieneś spróbować uczynić to rzadkim zjawiskiem, ale jeśli musisz ...find
bez 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ć znajomegogrep
do filtrowania plików, które chcesz usunąć.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 zrm -v
pełnymi poprzednio wymienionymi wyjściami, za pośrednictwemxargs
: co daje mi ten wynik. Takie podglądanie zapobiega problemom, gdy powiedzmy, że popełnisz literówkę i piszeszsample
zamiastexample
.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 toxargs
do niepowodzenia lub spowoduje podanierm
niekompletnych 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ąfind
operatorów i działań.Poniżej zostaną wyświetlone wszystkie pliki zawierające to słowo
example
Jeśli ta lista to pliki, które chcesz usunąć, użyj
-exec
akcji, aby przekazać plikirm
.Zobacz Korzystanie z Znajdź, aby uzyskać dodatkową pomoc dotyczącą używania
find
.źródło
find
przesyłanie strumieniowe dogrep
ixargs rm
jest niebezpieczne.mv
(moje ulubione polecenie);)find
z bezpiecznego sposobu, który nie psuje się (i potencjalnie usuwa niewłaściwe pliki), jeśli nazwy plików zawierają spację, tabulator, znak nowej linii"
lub'
znaki. Npfind . -name "*example*" -exec rm -v {} +
. mywiki.wooledge.org/UsingFindfind -delete
taki niebezpieczny? Powiedziałbym coś tutaj, ale nie wiem inaczej niż ostatnio znalazłem i wyczyściłem mój,/
mimo że na sucho bez opcji-delete
znalazłem tylko kilka plików, które chciałem usunąć. Widzę, że-exec rm
zamiast tego polecasz .-delete
nie jest niebezpieczny i można go bezpiecznie używać zamiast-exec rm {} +
. Generalnie wolę używać standardowych narzędzi i funkcji, jeśli to możliwe.-delete
jest niestandardowym rozszerzeniem GNU dofind
, więc będzie działać dobrze na Ubuntu, ale może nie działać na innych systemach.Tak. Niecytowana postać tyldy jako oddzielny argument zostanie rozszerzona na twój homedir. Więc
rm -r ~
został rozszerzony dorm -r /home/yourusename
. Więc powiedziałeś rmowi, aby rekurencyjnie usuwał wszystkie pliki z twojego katalogu głównego.Więcej informacji na temat działania rozszerzenia tyldy można znaleźć na stronie http://www.gnu.org/software/bash/manual/bashref.html#Tilde-Expansion .
źródło