Non c'è modo per un sistema totalmente a prova di proiettile. E aggiungendo "Sei sicuro?" suggerimenti alle cose è controproducente e porta a "Certo che ne sono sicuro". reazioni istintive.
Un trucco che ho imparato da un libro negli anni passati è fare prima ls -R blah*
quindi, esegui rm -fr blah*
se e solo se l'elenco che è apparso ha colpito quello che volevo colpire.
È abbastanza facile eseguire il ls
comando prima, poi ↑ , elimina il ls -R
e sostituisci con rm -fr
.
L'ultima domanda è:"Se l'informazione è stata preziosa per te, dov'è il tuo backup?"
Un DEBUG
trap potrebbe essere scritto per annullare i comandi che sembrano sospetti. Il codice seguente, o un codice simile, può essere aggiunto al tuo ~/.bashrc
:
shopt -s extdebug
checkcommand() {
if [[ $BASH_COMMAND = 'rm -r'*' *' ]]; then
echo "Suppressing rm -r command ending in a wildcard" >&2
return 1
fi
# check for other commands here, if you like
return 0
}
trap checkcommand DEBUG
Regola la logica a piacere.
(In realtà non mi aspetto che questo approccio sia utile -- troppi modi per rovinare un comando in modo distruttivo per trovarli testati uno per uno -- ma fornisce una risposta letterale alla domanda).
Puoi allenarti a usare, ad esempio, rmrf
al posto di rm -rf
?
In tal caso, questa funzione bash ti darà la possibilità di vedere cosa accadrebbe effettivamente prima di confermare il comando:
rmrf() { echo rm -rf "[email protected]"; read -p "Proceed (y/N)? "; [ "${REPLY,,}" = y ] && rm -rf "[email protected]"; }
Per rendere permanente questa funzione, aggiungi questa riga al ~/.bashrc
file su ogni computer che utilizzi.
Confronto con il comune rm
pseudonimo
È comune definire un alias:
alias rm='rm -i'
Questo ha due limitazioni:
-
Se arrivi a dipendere da questo alias, subirai uno shock quando ti trovi su una macchina o in un ambiente che non lo possiede. Al contrario, provando a eseguire
rmrf
su una macchina senza quella funzione restituirà un innocuocommand not found
. -
Questo alias non è di aiuto nel tuo caso perché
-f
l'opzione fornita sulla riga di comando sovrascrive-i
opzione nell'alias.