Jak mogę przenieść pliki „rm” do kosza?

62

Korzystam z terminala na co dzień, często go używam rm DirectoryName. Czasami jestem trochę szalony i robię to rm *. Jak możesz sobie wyobrazić, te shenanigany czasami wracają i uderzają mnie w twarz. Czy ktoś wie, jak tworzę mapowanie, więc rm whateverprzenosi wszystko do kosza, który następnie usuwam ręcznie.

Steve
źródło
3
możesz zrobićmv /file/to/delete ~./Trash
6
Trudno jest umieścić koła treningowe na precyzyjnym narzędziu, takim jak rm, bez łamania innych skryptów. Coś takiego alias rm=/bin/rm -ipowinno cię bezpiecznie wyszkolić ze szaleństwa . Ponadto - z którego katalogu Kosz chcesz korzystać rm? Robi się niezręczny, ponieważ Mac OS X ma katalog śmieci dla każdego wolumenu, a także kosz na poziomie użytkownika.
bmike
1
Jeśli używasz zsh, domyślnie wyświetli się monit, gdy to zrobisz rm *lubrm /path/*
Daniel Serodio,
1
Dodaj mnie do listy osób, które uważają, że na tak strasznie niebezpieczne pytanie można odpowiedzieć. Jeśli pracowałeś dla mnie, starałbym się nie dać ci klapsa, dopóki NIGDY nie obiecałeś, że „trochę się zwariujesz” po zachęcie powłoki i wydasz polecenia takie jak „rm”. Chciałbym również upewnić się, że nie masz uprawnień administratora sudo do komputera, z którego korzystam lub za który jestem odpowiedzialny. Zanim napiszę „rm” lub „sudo”, fizycznie wstaję i pytam siebie, czy jestem w 100% pewien, że rozumiem konsekwencje tego, co zamierzam zrobić. Może po prostu musisz zrobić „rm -rf” i cierpieć przez chwilę.
Wilfred Smith
Z góry przepraszam, jeśli mój komentarz wydaje się brutalny, ale samo pytanie mnie przeraża.
Wilfred Smith

Odpowiedzi:

79

Zły pomysł

Korzystanie rmprzenieść pliki do kosza jest jak chwast. Jest to powszechne i przyjemne, ale może być dla ciebie złe w przyszłości. ;)

Podczas korzystania z urządzenia naprawdę potrzebujesz kontroli rm.


Nie używaj rm

Wyobraź sobie , że przyzwyczajasz się do rm przeprowadzania się do kosza i nabierania tego nawyku. Jasne, twój system jest bezpieczny, ale kiedy zalogujesz się do notatnika znajomego (lub żony lub szefa) i będziesz musiał coś usunąć? Będziesz faktycznie używał prawdziwego rm- usuwając te pliki na zawsze. To zły nawyk i musisz o tym wiedzieć.

Zamiast tego zainstaluj rmtrashi nawyk korzystania z niego:

# install rmtrash, (either from the macports or by the brew.)
$ alias trash="rmtrash"
$ alias   del="rmtrash"       # del / trash are shorter than rmtrash

Korygowanie złych nawyków

Inną rzeczą, którą możesz zrobić, aby zmusić się do użycia rmtrashzamiast, rmjest alias do niestandardowej wiadomości w twoim .profile.

alias rm="echo Use 'del', or the full path i.e. '/bin/rm'"

Tak więc, za każdym razem, gdy użyjesz, pojawi rmsię monit o użycie rmtrashalbo /bin/rm. Pamiętaj, że jest to tylko tymczasowe, po chwili powinieneś usunąć alias.


Nigdy nie rób czegoś takiego:

$ pwd
/
$ cd /tnp; rm -rf *
sh: cd: /tnp: No such file or directory

Pop Quiz: W jakim katalogu rmuruchomi się polecenie? :)

Ps: Właśnie usunąłem niechciane zmiany w tym poście, co dodało nonsensów na temat aliasów.

jm666
źródło
14
&&jest twoją liną ratunkową. ;jest diabłem. PS Odpowiedź jest taka, że ​​prawie wszystko w twoim systemie znika, w powyższym przykładzie.
Jason Salaz,
Chociaż rm nie wykonuje bezpiecznego usuwania, ale robi to przejście do kosza / pustego (w mojej konfiguracji).
Mike Graf
1
trash-cliZamiast tego instalują użytkownicy Debian / Ubuntu , np. aptitude install trash-cli- patrz github.com/andreafrancia/trash-cli
Daniel Sokolowski
@ jm666 Sprawdź także kosz ( post na blogu i źródło ). Prosi Findera o usunięcie plików. Co więcej, może również używać standardowych interfejsów API systemu plików Objective C (szybciej) i wrócić do Findera, jeśli nie ma wystarczających uprawnień. brew install trash
parth
rmtrashjest naprawdę stary, ostatnio aktualizowany w 2003 roku i pokazuje. Ma o wiele mniej opcji niż rmi jeśli powiesz rmtrashna woluminie dodatkowym, przenosi te pliki do folderu kosza użytkownika na dysku systemowym, co może zająć dużo czasu w przypadku dużych plików. trashOpcja zalecana przez Parth jest lepiej, rozwiązując problem keep na tej samej objętości, ale nadal brakuje wielu rmopcji.
Warren Young
25

Mogę wymyślić kilkanaście sposobów na zakodowanie tego, ale kategorycznie odmówię wpisania któregokolwiek z nich w odpowiedzi. Ja zdecydowanie polecam ograniczyć swój zwyczaj coraz trochę szalona . Nie powinieneś mieć w ogóle zwyczaju używania, rmjeśli nie możesz go prawidłowo używać.

Podstawowym problemem jest to, że nawet jeśli zainstalujesz siatkę bezpieczeństwa we własnym systemie, to pomoże ci tylko zachować złe nawyki, a kiedy zdarzy ci się być na innej maszynie, która nie ma takich samych niestandardowych zabezpieczeń, będziesz zrób coś niesamowicie złego.

Właściwym rozwiązaniem jest użycie rmgo tak, jak miało być używane, w tym ręczne dodawanie -iargumentu, gdy masz wątpliwości, jak glob rozszerzy się, i masz dobre kopie zapasowe systemu, które możesz przywrócić w przypadku poważnego błędu użytkownika. Próba dodania „kosza” do poleceń, których w pozostałej części wszechświata nie używa, jest krokiem w połowie najgorszym z obu światów.

Użyj kosza lub nie. Używaniermnie idzie do kosza, usuwa.

Jeśli chcesz korzystać z kosza, nie ma w tym nic złego. Po prostu przyzwyczaj się do używania rmtrashpolecenia zamiast rm. Pomoże to twojemu mózgowi zrozumieć, co się dzieje, i nie doprowadzi cię do złego nawyku, który spowoduje później smutek.

Caleb
źródło
1
Twój punkt nie jest obliczany w tym przypadku. Ludzie codziennie usuwają rzeczy przypadkowo, kopie zapasowe systemu nie działają w przypadku komputera domowego (który jest mój), ponieważ zasoby są ograniczone, przejście do kosza to o wiele bardziej wydajny sposób usuwania tych usunięć w moim przypadku przypadek użycia.
steve
5
@steve całkowicie przegapiłeś ten punkt. rmz definicji usuwa plik z dysku. Nie wysyła go do kosza. Nauczenie się używania, rmgdy masz na myśli wysyłanie do kosza , przygotowuje cię na katastrofę. Jeśli chcesz wysłać do kosza, użyć rmtrashlub programu, który został zaprojektowany do tego zadania, to później nie spotkasz koszmarów. Nie mówiłem, że używanie kosza jest z natury złe, ale jeśli chcesz go użyć, nie podłączaj go do czegoś, co nie było przeznaczone do użycia!
Caleb
2
brew install rmtrashi przestań używaćrm
GabLeRoux
To niesamowita odpowiedź, wyjaśniła mi kilka rzeczy. Spróbuję wyrobić sobie nawyk używania rmtrashzamiast rm.
Sheharyar
sudo add-apt-repository ppa: nateshmbhat / rm-trash. Następnie zainstaluj „rm-trash”
Natesh bhat
3

Istnieją sposoby, aby uchronić się przed strasznymi skutkami rm. Zgadzam się jednak z innymi komentatorami tutaj: bardzo niewielu jest dobrych.

Ani przez chwilę nie wierz, że zmiana środowiska poleceń pomoże ci. Na przykład wszędzie znajdziesz ludzi online, którzy zalecają zrobienie czegoś takiego:

alias rm="rm -i"

lub

function rm()
{
    echo >&2 'rm forbidden; use "/bin/rm"'
}
export -f rm

To nie zadziała. Kropka. Istnieje wiele przypadków użycia, w których te małe sztuczki salonowe zawiodą cię nieszczęśliwie.

Jedynym niezawodnym sposobem, w jaki oszczędziłem sobie niebezpieczeństwa, rmjest regularne tworzenie kopii zapasowej za pośrednictwem crona w katalogach, w których pracuję. Raw UNIX robi to dla ciebie ładnie, z wielką prostotą, używając findw połączeniu z -mtimedo sprawdzania plików, które zostały zaktualizowane w określonym czasie lub od pewnego czasu.

Jim Campbell
źródło
+1 za cronsam. Dzięki :)
bmike
2

Użyj narzędzia wiersza polecenia, takiego jak rmtrash lub skrypt tat używa appscript do wywoływania Findera w celu usunięcia.

Po zainstalowaniu rmtras w celu powiedzenia / usr / local / bin / rmtrash stwórz alias dla bash

alias rm='rmtrash'

Możesz użyć \ rm, aby bezpośrednio wywołać rm i zignorować alias

użytkownik151019
źródło
14
Jeśli używasz takiego narzędzia rmtrash, zrób sobie przysługę i użyj go pod własną nazwą . Nigdy nie pseudonimem rzeczy, których nie rmnależy rm, któregoś dnia cię ugryzie.
Caleb
1
rmtrashnie jest kompatybilny z rm(nie obsługuje tych samych parametrów wiersza poleceń, co -r), więc alias naprawdę nie jest przydatny w żadnym wypadku
Perry
To zły pomysł, aby alias rmtrashdo rm. Nie tylko nie są one kompatybilne, ale także wymuszą zły nawyk i przypadkowo użyjesz go rmw innym systemie, myśląc, że tylko używasz rmtrash.
Fayaz,
1

Po prostu chcę dodać nawyk przydatny dla tych, którzy jeszcze tego nie robią. Przed użyciem rm do czegokolwiek, najpierw wykonaj na nim „ls”. W ten sposób możesz zobaczyć wszystkie pliki, które zamierzasz usunąć. Następnie zamiast ponownego wpisywania, po prostu pociągnij poprzednie polecenie „ls” i zamień ls na rm. Ten nawyk zmniejszył wiele lęków podczas wywoływania rm.

Scott Bridgman
źródło
-1

Wprowadzenie (możesz to pominąć)

Dla mnie rm -iwystarczy, ponieważ monituje cię przed usunięciem dowolnego pliku. Jednak pewne dodatkowe zabezpieczenia zapewnione przez safe-rmwcale nie są złym pomysłem.

Proste aliasjak rm=safe-rm -i mogłoby być wystarczające, jednak rm -rfnie zadziałałoby, ponieważ -izostało zastąpione przez -f.

Musimy więc upewnić się, że -izawsze nastąpi to później -f!


Moje rozwiązanie (3 kroki):

  • Zainstaluj safe-rm: brew install safe-rm

    Nadal możesz pracować rm, ale zmodyfikowałeś RM_BINw następnym kroku

  • Edytuj swój ~/.profile(lub bash_profile lub cokolwiek) i umieść następujący fragment kodu, (który zawiera an aliasi a function):

    alias rm="rm_i"
    
    function rm_i(){
    RM_BIN=safe-rm # you can replace it with regular rm if you like
    
    args=""
    files=""
    argsDone=0 # to make sure arguments are before the files
    
    for var in "$@"
    do
        if [[ $var == \-* ]] ; then
            if [ $argsDone -eq 1 ] ; then
                $RM_BIN # just to show the usage of rm
                return
            fi
            args+=" $var"
        else
            argsDone=1
            files+=" $var"
        fi
    done
    
    args+=" -i" # Put -i at the end (so rm -rf will not ignore it)
    
    $RM_BIN $args $files
    }
    
  • Wreszcie , logouta loginwięc są stosowane aktualizacje w .profile. NIE używaj go przed wylogowaniem / zalogowaniem!


Uwagi:

  • Można go zastosować do dowolnej dystrybucji Linuksa, z niewielkimi modyfikacjami.
  • NIE porusza twojego personelu do thrashu. Po prostu prosi o usunięcie każdego pliku!
  • Działa -rfz wyrażeniami regularnymi.
  • Jeśli naprawdę chcesz używać rm -rf BEZ pytania o każdy pojedynczy plik / folder, którego możesz nadal używać /bin/rm -rf(lub safe-rm -rfjeśli go zainstalowałeś).
  • Nigdy więcej niezamierzonych rm -rf lub rm * ;)
Paschalis
źródło
5
Aliasing rm do czegoś większego niż on sam (np. alias rm='sudo rm') Jest jak przypięcie Uzi do noża kuchennego: pewnego dnia dostaniesz więcej, niż się spodziewałeś, kiedy idziesz wyciąć tego ananasa. Aliowanie rm do czegokolwiek mniejszego od siebie (np. alias rm='rmtrash') Jest jak pozwalanie dzieciom na zabawę rozbrojonymi granatami ręcznymi i nie uczenie ich, czym one są: pewnego dnia, gdy napotkają prawdziwego, nie potraktują go z odpowiednią ostrożnością. Tak czy inaczej - aliasing rm jest szkodliwy dla twojego bezpieczeństwa osobistego i zdrowia publicznego!
Caleb
2
Używanie czegoś takiego jak safe-rm to rozsądna rada. Aliasowanie go do rm nie jest. Używaj go pod własną nazwą lub unikalnym pseudonimem, aby nie brać za pewnik siatki bezpieczeństwa, która nie zawsze będzie istnieć.
Caleb
Rozumiem co masz na myśli. ALE powodem, dla którego to zrobiłem, jest to, że pracuję z wieloma terminalami .. niektórymi terminalami zdalnymi i niektórymi lokalnymi. I chcę rzucić wiele granatów na zdalne terminale, ale kiedy przypadkowo pociągnęłam plombę bezpieczeństwa na lokalnym terminalu, chcę zobaczyć ostrzeżenie przed wybuchem .
Paschalis
@Paschalis i co się stanie, jeśli skrypt lub zainstalowany program będzie wymagał użycia rm? Również punkt Caleba jest jeszcze bardziej aktualny - jeśli przyzwyczaisz się do systemu z aliasem safe-rm, możesz się z nim lekkomyślnie wykorzystać i ostatecznie użyć go w systemie z niezmienionym rm.
Manishearth,