Come posso spostare i file 'rm' nel cestino?


62

Uso il terminale quotidianamente, lo userò spesso rm DirectoryName. A volte impazzisco e lo faccio rm *. Come puoi immaginare, questi shenanigans a volte sono tornati e mi hanno colpito in faccia. Qualcuno sa come creo una mappatura, quindi rm whateversposta tutto nel cestino che elimino manualmente.


3
puoi faremv /file/to/delete ~./Trash

6
È difficile mettere le ruote di allenamento su uno strumento di precisione come rm senza rompere altri script. Qualcosa del genere alias rm=/bin/rm -idovrebbe farti allenare in modo sicuro dal tuo pazzo . Inoltre - quale directory Cestino vuoi usare? Diventa ingombrante poiché Mac OS X ha una directory cestino per ciascun volume e un cestino a livello di utente.
bmike

1
Se usi zsh, per impostazione predefinita ti verrà richiesto quando lo fai rm *orm /path/*
Daniel Serodio

1
Aggiungimi all'elenco delle persone che pensano che questa sia una domanda così pericolosamente pericolosa a cui rispondere. Se lavorassi per me, farei fatica a non schiaffeggiarti finché non avessi promesso MAI di "diventare un po 'pazzo" al prompt della shell ed emettere comandi come "rm". Mi assicurerei inoltre di non avere i privilegi di amministratore sudo per qualsiasi macchina che utilizzo o di cui ho la responsabilità. Prima di digitare "rm" o "sudo", mi alzo fisicamente e mi chiedo se sono sicuro al 100% di comprendere le ripercussioni di ciò che sto per fare. Forse hai solo bisogno di fare un "rm -rf" e soffrire per un po '.
Wilfred Smith,

Mi scuso in anticipo se il mio commento sembra brutale, ma la stessa domanda mi terrorizza.
Wilfred Smith,

Risposte:


79

Cattiva idea

L'uso rmper spostare i file nel cestino è come un'erbaccia. È comune e piacevole, ma può essere dannoso per te in futuro. ;)

Hai davvero bisogno di controllarti quando lo usi rm.


Non usare rm

Immagina , ti abitui a muoverti nella spazzatura e prendere l'abitudine. Certo, il tuo sistema è sicuro ma quando accedi al taccuino di un amico (o di tua moglie o del tuo capo) e devi eliminare qualcosa? In realtà utilizzerai il vero rm- eliminando quei file per sempre. È una cattiva abitudine e devi saperlo.

Quindi, invece, installa rmtrashe prendi l'abitudine di usarlo:

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

Correggere le cattive abitudini

Un'altra cosa che puoi fare per forzarti a usare rmtrashinvece di rmè alias in un messaggio personalizzato nel tuo .profile.

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

Quindi, ogni volta che usi rm, ti verrà richiesto di usare rmtrasho /bin/rm. Ricorda, questo è solo temporaneo, dopo un po 'dovresti rimuovere l'alias.


Mai e poi mai, fare qualcosa del genere:

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

Pop Quiz: in quale directory verrà rmeseguito il comando? :)

Ps: Ho appena rimosso alcune modifiche indesiderate a questo post, cosa che ha aggiunto alcune sciocchezze sugli alias.


14
&&è la tua linfa vitale. ;è il diavolo. PS La risposta è che praticamente tutto sul tuo sistema scompare, nell'esempio sopra.
Jason Salaz,

Anche se, rm non cancella in modo sicuro, ma passare a cestino / svuota (nella mia configurazione).
Mike Graf,

1
Gli utenti Debian / Ubuntu installano trash-cliinvece, es. aptitude install trash-cli- vedi github.com/andreafrancia/trash-cli
Daniel Sokolowski,

@ jm666 Dai un'occhiata anche al cestino ( post e fonte del blog ). Chiede a Finder di eliminare i file. Inoltre, può utilizzare anche API standard del filesystem Objective C (più veloce) e fallback su Finder se diritti insufficienti. brew install trash
par

rmtrashè davvero vecchio, essendo stato aggiornato l'ultima volta nel 2003, e mostra. Ha molte meno opzioni rispetto a rm, e se dite rmtrashsu un volume secondario sposta quei file nella cartella cestino dell'utente sull'unità di sistema, il che può richiedere molto tempo per file di grandi dimensioni. L' trashopzione consigliata da parth è migliore, risolvendo il problema di mantenere lo stesso volume, ma mancando ancora molte rmopzioni.
Warren Young,

25

Posso pensare a una dozzina di modi per codificarlo, ma rifiuto categoricamente di scriverne uno qualsiasi in una risposta. Ti consiglio vivamente di frenare l'abitudine di diventare un po 'pazzo . Non dovresti avere l'abitudine di usarlo rmse non riesci a usarlo correttamente.

Il problema fondamentale qui è che anche se installi una rete di sicurezza sul tuo sistema, ciò ti aiuterà solo a mantenere le tue cattive abitudini e quando un giorno sarai su un'altra macchina che non ha le stesse protezioni personalizzate, avrai fai qualcosa di epilamente cattivo.

La soluzione corretta è quella di utilizzare rmcome previsto, inclusa l'aggiunta manuale -idell'argomento ogni volta che si è in dubbio su come si espanderà un glob e avere buoni backup di sistema che è possibile ripristinare in caso di gravi errori dell'utente. Cercare di aggiungere "cestino" ai comandi che nel resto dell'universo non lo usano è un passo a metà strada che è il peggiore di entrambi i mondi.

O usa la spazzatura o no. L'usormnon va nel cestino, ma lo rimuove.

Se vuoi usare la spazzatura, non c'è niente di sbagliato in questo. Prendi l'abitudine di usare il rmtrashcomando invece di rm. Questo aiuterà il tuo cervello a capire cosa sta succedendo e non ti farà prendere una cattiva abitudine che causerà dolore in seguito.


1
Il tuo punto non viene calcolato in questo caso. Le persone eliminano le cose accidentalmente su base giornaliera, i backup di sistema non funzionano nel caso di un PC di casa (quale è il mio) poiché le risorse sono limitate, il passaggio al cestino è un modo molto più efficiente di gestire queste eliminazioni per il mio particolare caso d'uso.
steve

5
@steve hai perso del tutto il punto. rmper definizione rimuove un file dal disco. Non lo invia nella spazzatura. Insegnare a te stesso a usare rmquando intendi inviare a cestino ti prepara per il disastro. Se si desidera inviare nel cestino, utilizzare rmtrasho un programma progettato per il lavoro, non si incontreranno incubi in seguito. Non stavo dicendo che usare la spazzatura sia intrinsecamente sbagliato, ma se vuoi usarla, non collegarla a qualcosa che non è stato progettato per usarla!
Caleb,

2
brew install rmtrashe smetti di usarerm
GabLeRoux il

Questa è una risposta fantastica, chiarita alcune cose per me. Proverò a prendere l'abitudine di usare rmtrashinvece di rm.
Sheharyar,

sudo add-apt-repository ppa: nateshmbhat / rm-trash. Quindi installare "rm-trash"
Natesh bhat il

3

Ci sono modi per proteggersi da risultati orribili rm. Tuttavia, sono d'accordo con gli altri commentatori qui: pochissimi sono buoni.

Non credere per un minuto che cambiare l'ambiente di comando ti aiuterà. Ad esempio, troverai persone online ovunque consiglia di fare questo tipo di cose:

alias rm="rm -i"

o

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

Questo non funzionerà. Periodo. Ci sono molti casi d'uso in cui questi piccoli trucchi da salotto ti falliranno miseramente.

L'unico modo affidabile che ho usato per risparmiarmi dal pericolo rmè impostare un normale processo di backup tramite cron sulle directory in cui lavoro. Raw UNIX lo fa bene per te, con grande semplicità, usando findinsieme -mtimeper controllare i file che sono stati aggiornati entro o da un certo tempo.


+1 da cronsolo. Grazie :)
bmike

2

Utilizzare uno strumento da riga di comando come rmtrash o uno script tat usa appscript per chiamare il Finder per fare lì eliminare.

Dopo aver installato rmtras per dire / usr / local / bin / rmtrash, crea un alias per bash

alias rm='rmtrash'

Puoi usare \ rm per chiamare rm direttamente e ignorare l'alias


14
Se usi uno strumento del genere rmtrash, per favore fai un favore e usalo con il suo nome . Mai alias cose che non sono rma rm, sarà un giorno mordere.
Caleb,

1
rmtrashnon è compatibile con rm(non supporta gli stessi parametri della riga di comando come -r) quindi un alias non è davvero utile in ogni caso
Perry

E 'una cattiva idea quella di alias rmtrasha rm. Non solo non sono compatibili, ma imporranno anche la cattiva abitudine e utilizzerai accidentalmente rmin un altro sistema pensando di utilizzare solo rmtrash.
Fayaz,

1

Voglio solo aggiungere un'abitudine utile per entrare in quelli che non lo fanno già. Prima di usare rm per qualsiasi cosa, fai prima "ls". In questo modo puoi vedere tutti i file che intendi eliminare. Quindi invece di riscrivere, basta tirare su il comando precedente 'ls' e scambiare ls con rm. Questa abitudine ha ridotto molta ansia quando si invoca rm.


-1

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 abbastanza, tuttavia rm -rfnon funzionerebbe, perché -iè superato 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 puoi ancora usare /bin/rm -rf(o safe-rm -rfse l'hai installato).
  • Non più involontario rm -rf o rm * ;)

5
Alias ​​rm su qualcosa di più grande di se stesso (ad esempio alias rm='sudo rm') è come legare un Uzi a un coltello da cucina: un giorno otterrai più di quanto ti aspettassi quando vai a tagliare quell'ananas. Aliasing a qualcosa di più piccolo di se stesso (ad es. alias rm='rmtrash') È come lasciare che i tuoi bambini giochino con bombe a mano disarmate e non insegnare loro quello che sono realmente: un giorno quando ne incontreranno uno reale non lo tratteranno con la dovuta cautela. Ad ogni modo, l'aliasing rm fa male alla sicurezza personale e alla salute pubblica!
Caleb,

2
Usare qualcosa come safe-rm è un consiglio ragionevole. Alias ​​a rm non lo è. Usalo con il suo nome o un alias univoco in modo da non dare per scontata una rete di sicurezza che non sarà sempre lì.
Caleb,

Vedo il tuo punto. MA, la ragione per cui l'ho fatto, è che lavoro con molti terminali .. alcuni terminali remoti e alcuni locali. E voglio lanciare molte granate sui terminali remoti, ma quando tiro accidentalmente il sigillo di sicurezza sul terminale locale, voglio vedere un avviso prima dell'esplosione .
Paschalis,

@Paschalis e cosa succede se è necessario utilizzare uno script o un programma installato rm? Inoltre, il punto di Caleb è ancora più valido: se ti abitui a un sistema con alias sicuro, allora potresti essere sconsiderato con esso e alla fine utilizzarlo su un sistema con un rm non bilanciato.
Manishearth,
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.