Bezpieczny zamiennik OS X `rm`?

9

Przyzwyczaiłem się rmdo aliasu czegoś bezpieczniejszego.

Używam osx-trash, ale kiedy uaktualnię do Ruby 1.9.2, to przestaje działać.

Wiem o trash-cliPythonie, ale wolałbym coś, co przenosi pliki do folderu Kosz w OS X niż do innego katalogu.

Czy ktoś ma dobre rozwiązanie?

zniknął
źródło
9
Proszę, nie przyzwyczajaj się do aliasu rm, raczej przyzwyczaj się mv files/to/be/deleted ~/.Trash. Jest bezpieczny i spójny w różnych systemach.
Asmus
Asmus: Widzisz, że to działa tylko wtedy, gdy twój komputer Mac ma tylko 1 partycję. Jeśli masz inną partycję, przejście do ~ / .Trash nie jest naprawdę poprawne (moja ~ partycja nie jest wystarczająco duża).
zniknął
1
Cóż, powinieneś wspomnieć w swoim pytaniu, że masz wiele partycji!
slhck
1
zniknął: cóż, myślę, że mvnadal jest twoim najbezpieczniejszym zakładem. Możesz łatwo utworzyć nowy folder na drugiej partycji o nazwie Trash(lub jak chcesz), a następnie mvpliki tam. Po upewnieniu się, że można je usunąć, usuń i ponownie utwórz ten kompletny folder.
Asmus
i wtedy możesz mieć ~ / .Trash być miękkim linkiem do folderu Kosz na partycji, który ma wystarczającą ilość miejsca
AlcubierreDrive

Odpowiedzi:

8

W przypadku OSX możesz użyć safe-rm

brew install safe-rm

Musisz zrobić dodatkowy krok, aby wybrać rmlepszą opcję niż domyślną - dodaj dowiązanie symboliczne.

echo $PATH

Dla mnie mam /usr/local/bin:najpierw ten sam katalog co safe-rminstall

Dodaj dowiązanie symboliczne do safe-rm

ln -s /usr/local/bin/safe-rm /usr/local/bin/rm

Aby usunąć i przywrócić ustawienia domyślne rm, możesz usunąć dowiązanie symbolicznerm /usr/local/bin/rm

Plik konfiguracyjny można dodać pod adresem /etc/safe-rm.conf

na przykład:

/private
/Applications
/Developer
/Library
/Network
/System
/Users
/Volumes
/test

Przetestuj z rm -rf /testnim spowoduje odmowę usunięcia zsafe-rm.conf

David Thomas
źródło
warto dodać również /do listy ścieżek, których nie należy usuwać, aby zapobiec klasycznemu rm -fr /
Mikael Lepistö
3

hasseg.org/trash to narzędzie Objective-C, takie jak osx-trash .

Napisałem funkcję powłoki, która nie zastępuje plików tak mv * ~/.Trash, jak by to zrobiła. Zawsze jednak przenosi elementy do woluminu początkowego.

trash() {
    for f in "$@"; do
        bn=$(basename "$f")
        while [ -e ~/.Trash/"$bn" ]; do
            bn="$bn $(date +%H.%M.%S %p)"
        done
        mv "$f" ~/.Trash/"$bn"
    done
}
Lri
źródło
Tak, mam więcej niż 1 partycję i chciałbym zachować usunięte pliki na tej samej partycji, zamiast przenosić je
zniknął
Dodałem linki do dwóch innych narzędzi i innej funkcji. Każdy z nich powinien przechowywać pliki na tej samej partycji.
Lri,
2

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