Sostituto sicuro per OS X `rm`?


9

Sono abituato a dover rmalias qualcosa di più sicuro.

Ho usato osx-trash, ma una volta eseguito l'aggiornamento a Ruby 1.9.2, questo smette di funzionare.

Conosco trash-cliPython, ma preferirei di gran lunga qualcosa che sposta i file nella cartella Cestino in OS X piuttosto che in un'altra directory.

Qualcuno ha una buona soluzione?


9
Per favore, non abituarti a un alias rm, piuttosto abituati mv files/to/be/deleted ~/.Trash. È sicuro e coerente tra i sistemi.
Asmus,

Asmus: vedi che funziona solo se il tuo mac ha solo 1 partizione. Se hai un'altra partizione, passare a ~ / .Trash non è proprio corretto (la mia ~ partizione non è abbastanza grande).
scomparso il

1
Bene, avresti dovuto menzionare nella tua domanda che hai più partizioni!
slhck,

1
scomparedng: beh, penso che mvsia ancora la tua scommessa più sicura. Potresti facilmente creare una nuova cartella sull'altra partizione chiamata Trash(o comunque ti piaccia) e quindi mvi file lì. Una volta che sei sicuro che possono essere eliminati, elimina e ricrea la cartella completa.
Asmus,

e quindi puoi semplicemente avere ~ / .Trash come collegamento soft alla cartella Cestino della partizione che ha spazio sufficiente
AlcubierreDrive

Risposte:


8

Per OSX, puoi usare safe-rm

brew install safe-rm

Devi fare un passo in più per preferirlo rispetto all'impostazione predefinita rm: aggiungi un link simbolico.

echo $PATH

Per me, ho /usr/local/bin:prima la stessa directory di safe-rminstall

Aggiungi link simbolico a safe-rm

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

Per rimuovere e ripristinare il valore predefinito rmè possibile rimuovere il collegamento simbolicorm /usr/local/bin/rm

Il file di configurazione può essere aggiunto a /etc/safe-rm.conf

per esempio:

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

Test con rm -rf /testesso negherà l'eliminazione dasafe-rm.conf


potrebbe essere utile aggiungere anche /all'elenco dei percorsi che non devono essere eliminati per impedire il classico rm -fr /
Mikael Lepistö

3

hasseg.org/trash è un'utilità Objective-C come osx-trash .

Ho scritto una funzione shell che non sovrascrive i file come mv * ~/.Trashfarebbe. Tuttavia, sposta sempre gli elementi nel volume di avvio.

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
}

Sì, ho più di 1 partizione e vorrei mantenere i file eliminati nella stessa partizione anziché spostarli attraverso
scomparso il

Ho aggiunto collegamenti ad altre due utilità e un'altra funzione. Ognuno di loro dovrebbe mantenere i file sulla stessa partizione.
Lri,

2

Introduzione (puoi saltarlo)

Per me rm -isarebbe sufficiente, perché ti viene richiesto prima di eliminare qualsiasi file. Tuttavia, una maggiore sicurezza fornita da safe-rmnon è affatto una cattiva idea.

Un semplice mi aliaspiace rm=safe-rm -i potrebbe essere sufficiente, tuttavia rm -rfnon funzionerebbe, perché -iviene sostituito da -f.

Quindi, dobbiamo assicurarci che -ivenga sempre dopo -f!


La mia soluzione (3 passaggi):

  • Installa safe-rm: brew install safe-rm

    Puoi ancora lavorare con rm, ma hai modificato il RM_BINnel passaggio successivo

  • Modifica il tuo ~/.profile(o bash_profile o altro) e inserisci il seguente frammento di codice (che contiene an aliase 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
    }
    
  • Infine , logoute loginquindi vengono applicati gli aggiornamenti nel file .profile. NON usarlo prima di un logout / login!


Appunti:

  • Può essere applicato a qualsiasi distribuzione Linux, con lievi modifiche.
  • NON sposta il tuo staff al thrash. Ti chiede solo prima di eliminare ogni file!
  • Funziona con -rfe con regexes.
  • Se vuoi davvero usare rm -rf SENZA essere richiesto per ogni singolo file / cartella che puoi ancora usare /bin/rm -rf(o safe-rm -rfse l'hai installato).
  • Non più involontario rm -rf o rm * ;)
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.