¿Qué tan universal estás preguntando? ¿Te refieres a cada llamada rm de cada usuario o proceso? ¿O solo para ti mientras estás usando bash? O ..
djeikyb 01 de
Respuestas:
13
Hay una receta en webupd8.org para esto. Para evitar la descomposición del enlace, aquí está la información importante (con algunas adiciones).
sudo apt-get install trash-cli
Esto instalará trash, empty-trash, list-trashy restore-trashcomandos, que puede utilizarse como está o hacen rmun alias de trash(ver más abajo).
La semántica del trashcomando es un poco diferente al estándar rm: no requiere -rmarca para poder eliminar directorios. Si esto le molesta, webupd8.org propone el siguiente script, que puede poner en su RUTA y llamarlo trash-rm:
#!/bin/bash
# command name: trash-rm
shopt -s extglob
recursive=1
declare -a cmd
((i = 0))
for f in "$@"; do
case "$f" in
(-*([fiIv])r*([fiIv])|-*([fiIv])R*([fiIv]))
tmp="${f//[rR]/}"
if [ -n "$tmp" ]; then
#echo "\$tmp == $tmp"
cmd[$i]="$tmp"
((i++))
fi
recursive=0
;;
(--recursive) recursive=0
;;
(*)
if [ $recursive != 0 -a -d "$f" ]; then
echo "skipping directory: $f"
continue
else
cmd[$i]="$f"
((i++))
fi
;;
esac
done
trash "${cmd[@]}"
En Ubuntu 12.04 y versiones posteriores, el último comando en el script debe ser en trash-put "${cmd[@]}"lugar de trash "${cmd[@]}"(ya que el comando ha cambiado de trasha trash-put).
Luego haga que el script sea ejecutable:
chmod +x trash-rm
Una vez que lo tenga en algún directorio en su PATH, agregue un alias a su ~ / .bashrc, lo que hará que bash invoque su script en lugar del rmcomando real :
alias rm="trash-rm"
Como djeikyb señala correctamente, el truco de alias .bashrc solo funcionaría para el usuario cuyo .bashrc se modifica, y solo en la sesión de terminal bash.
Esta es una buena respuesta, pero sería aún mejor si la reorganizara para enfatizar el concepto principal de usar un alias. Creo que es muy importante entender cómo "interceptar" la empresa. Lo que sucede en su lugar se puede personalizar de muchas maneras.
djeikyb 01 de
Además, sería bueno mencionar que esto solo afecta el comando rm para la sesión bash del usuario.
djeikyb 01 de
@djeikyb: gracias por las sugerencias, actualicé la respuesta
Sergey
Funciona muy bien para mí sin el script (recién instalado y agregado alias="trash"). ¿Sabes cuál es la ventaja de tener el script?
Desgua
@desgua: el propósito del script es hacer trashque se comporte más como rmen lo que respecta a la eliminación de directorios. Esto puede ser importante para algunos scripts que esperan rmfuncionar de la manera en que lo hacen, por ejemplo. Actualicé la respuesta.
Sergey
0
libtrash (paquete libtrash en Ubuntu) parece hacer esto, pero nunca lo he usado.
Respuestas:
Hay una receta en webupd8.org para esto. Para evitar la descomposición del enlace, aquí está la información importante (con algunas adiciones).
Esto instalará
trash
,empty-trash
,list-trash
yrestore-trash
comandos, que puede utilizarse como está o hacenrm
un alias detrash
(ver más abajo).La semántica del
trash
comando es un poco diferente al estándarrm
: no requiere-r
marca para poder eliminar directorios. Si esto le molesta, webupd8.org propone el siguiente script, que puede poner en su RUTA y llamarlotrash-rm
:En Ubuntu 12.04 y versiones posteriores, el último comando en el script debe ser en
trash-put "${cmd[@]}"
lugar detrash "${cmd[@]}"
(ya que el comando ha cambiado detrash
atrash-put
).Luego haga que el script sea ejecutable:
Una vez que lo tenga en algún directorio en su
PATH
, agregue un alias a su ~ / .bashrc, lo que hará que bash invoque su script en lugar delrm
comando real :Como djeikyb señala correctamente, el truco de alias .bashrc solo funcionaría para el usuario cuyo .bashrc se modifica, y solo en la sesión de terminal bash.
Y eso debería ser todo.
fuente
alias="trash"
). ¿Sabes cuál es la ventaja de tener el script?trash
que se comporte más comorm
en lo que respecta a la eliminación de directorios. Esto puede ser importante para algunos scripts que esperanrm
funcionar de la manera en que lo hacen, por ejemplo. Actualicé la respuesta.libtrash (paquete libtrash en Ubuntu) parece hacer esto, pero nunca lo he usado.
fuente