¿Cómo puedo hacer que 'rm' mueva los archivos a la papelera?

62

Uso el terminal a diario, a menudo lo usaré rm DirectoryName. A veces me vuelvo un poco loco y lo hago rm *. Como puedes imaginar, estas travesuras a veces regresan y me golpean en la cara. ¿Alguien sabe cómo creo un mapeo para rm whatevermover todo a la papelera que luego elimino manualmente?

Steve
fuente
3
puedes hacermv /file/to/delete ~./Trash
66
Es difícil poner ruedas de entrenamiento en una herramienta de precisión como rm sin romper otros scripts. Algo así alias rm=/bin/rm -idebería sacarte de tu locura de forma segura . Además, ¿qué directorio de la papelera desea que use rm? Se vuelve complicado ya que Mac OS X tiene un directorio de basura para cada volumen, así como un bote de basura a nivel de usuario.
bmike
1
Si usa zsh, por defecto le avisará cuando lo haga rm *orm /path/*
Daniel Serodio
1
Agrégame a la lista de personas que piensan que esta es una pregunta atrozmente peligrosa para responder. Si trabajaras para mí, lucharía por no darte una bofetada hasta que prometieras NUNCA "volverte un poco loco" en un indicador de shell y emitir comandos como 'rm'. También me aseguraría de que no tenga privilegios administrativos de sudo para ninguna máquina que use o de la que sea responsable. Antes de escribir "rm" o "sudo", me levanto físicamente y me pregunto si estoy 100% seguro de entender las repercusiones de lo que estoy a punto de hacer. Quizás solo necesites hacer un "rm -rf" y sufrir por un tiempo.
Wilfred Smith
Disculpas de antemano si mi comentario parece brutal, pero la pregunta me horroriza.
Wilfred Smith

Respuestas:

79

Mala idea

Usar rmpara mover archivos a la basura es como hierba. Es común y placentero, pero puede ser malo para usted en el futuro. ;)

Realmente necesitas controlarte cuando lo usas rm.


No uses rm

Imagina que te acostumbras a moverte a la basura y te acostumbras. Claro, su sistema es seguro, pero cuando inicia sesión en la libreta de un amigo (o de su esposa o de su jefe) y tiene que eliminar algo. Realmente usarás lo real rm: eliminar esos archivos para siempre. Es un mal hábito, y debes saberlo.

Entonces, en lugar de eso, instálalo rmtrashy haz el hábito de usarlo:

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

Corrigiendo malos hábitos

Otra cosa que puede hacer para obligarse a usar en rmtrashlugar de usar un rmalias es un mensaje personalizado en su .profile.

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

Por lo tanto, cada vez que use rm, se le pedirá que use rmtrasho /bin/rm. Recuerde, esto es solo temporal, después de un tiempo debe eliminar el alias.


Nunca, haz algo como esto:

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

Pop Quiz: ¿En qué directorio se rmejecutará el comando? :)

PD: Acabo de eliminar algunas ediciones no deseadas de esta publicación, lo que agregó algunas tonterías sobre los alias.

jm666
fuente
14
&&es tu salvavidas ;es el diablo PD La respuesta es que casi todo en su sistema desaparece, en el ejemplo anterior.
Jason Salaz
Aunque, rm no elimina de forma segura, pero pasar a la papelera / vaciar sí (en mi configuración).
Mike Graf
1
Los usuarios de Debian / Ubuntu instalan en su trash-clilugar, ej. aptitude install trash-cli- ver github.com/andreafrancia/trash-cli
Daniel Sokolowski
@ jm666 También revise la basura ( publicación de blog y fuente ). Le pide a Finder los archivos de la papelera. Además, también puede usar las API estándar del sistema de archivos de Objective C (más rápido) y recurrir a Finder si no hay derechos suficientes. brew install trash
parth
rmtrashes muy antiguo, se actualizó por última vez en 2003, y se nota. Tiene muchas menos opciones que rm, y si dice rmtrashen un volumen secundario, mueve esos archivos a la carpeta de la papelera de su usuario en la unidad del sistema, lo que puede llevar mucho tiempo para archivos grandes. La trashopción recomendada por parth es mejor, ya que resuelve el problema de mantener el mismo volumen, pero aún faltan muchas rmopciones.
Warren Young
25

Puedo pensar en una docena de formas de codificar esto, pero me niego categóricamente a escribir cualquiera de ellas en una respuesta. Yo fuertemente recomiendo que frenar el hábito de conseguir un poco loco . No debería tener la costumbre de usarlo rmsi no puede usarlo correctamente.

El problema fundamental aquí es que incluso si instala una red de seguridad en su propio sistema, eso solo lo ayudará a mantener sus malos hábitos y, cuando algún día esté en otra máquina que no tenga las mismas protecciones personalizadas, lo hará haz algo épicamente malo.

La solución adecuada es usarlo rmcomo se debe usar, incluyendo agregar manualmente el -iargumento cada vez que tenga dudas sobre cómo se expandirá un globo, y tener buenas copias de seguridad del sistema que pueda restaurar en caso de un error grave del usuario. Tratar de agregar "basura" a los comandos que en el resto del universo no usan es un paso intermedio que es el peor de ambos mundos.

O usa la basura o no. El usormno va a la basura, se elimina.

Si quieres usar la basura, no hay nada de malo en eso. Solo tiene la costumbre de usar el rmtrashcomando en lugar de rm. Esto ayudará a su cerebro a comprender lo que está sucediendo y no lo llevará a un mal hábito que luego le causará dolor.

Caleb
fuente
1
Su punto no se computa en este caso. Las personas eliminan cosas accidentalmente a diario, las copias de seguridad del sistema no funcionan en el caso de una PC doméstica (que es la mía) ya que los recursos son limitados, un cambio a la papelera es una forma mucho más eficiente de manejar estas eliminaciones para mi particular caso de uso
steve
55
@steve te perdiste el punto por completo. rmpor definición, elimina un archivo del disco. No lo envía a la basura. Enseñar a ti mismo a usar rmcuando te refieres a enviar a la basura te prepara para el desastre. Si desea enviar a la basura, usar rmtrasho un programa que fue diseñado para el trabajo, no tendrá pesadillas más tarde. No estaba diciendo que usar la basura es inherentemente incorrecto, pero si quieres usarlo, ¡no lo conectes a algo que no estaba destinado a usarlo!
Caleb
2
brew install rmtrashy dejar de usarrm
GabLeRoux
Esta es una respuesta increíble, aclarado algunas cosas para mí. Intentaré formar el hábito de usar en rmtrashlugar de rm.
Sheharyar
sudo add-apt-repository ppa: nateshmbhat / rm-trash. Luego instale "rm-trash"
Natesh bhat el
3

Hay maneras de protegerse de los horribles resultados de rm. Sin embargo, estoy de acuerdo con los otros comentaristas aquí: muy pocos son buenos.

No creas ni por un minuto que cambiar el entorno del comando te ayudará. Por ejemplo, encontrará personas en línea en todas partes que recomiendan hacer este tipo de cosas:

alias rm="rm -i"

o

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

Esto no funcionará. Período. Hay muchos casos de uso en los que estos pequeños trucos de salón te fallarán miserablemente.

La única forma sólida que he usado para evitar el peligro rmes mediante la configuración de un proceso de copia de seguridad regular a través de cron en los directorios donde trabajo. Raw UNIX lo hace por usted de forma agradable, con gran simplicidad, y lo utiliza findjunto con -mtimepara verificar los archivos que se han actualizado dentro o desde un momento determinado.

Jim Campbell
fuente
+1 para cronsolo. Gracias :)
bmike
2

Use una herramienta de línea de comandos como rmtrash o un script que use appscript para llamar al Finder y eliminarlo.

Después de instalar rmtras para decir / usr / local / bin / rmtrash, cree un alias para bash

alias rm='rmtrash'

Puede usar \ rm para llamar a rm directamente e ignorar el alias

usuario151019
fuente
14
Si usa una herramienta como rmtrash, hágase un favor y úsela con su propio nombre . Nunca alias cosas que no son rma rm, será algún día te muerda.
Caleb
1
rmtrashno es compatible con rm(no admite los mismos parámetros de la línea de comandos -r), por lo que un alias realmente no es útil en ningún caso
Perry
Es una mala idea de alias rmtrasha rm. No solo no son compatibles, sino que también impondrá el mal hábito y lo usará accidentalmente rmen otro sistema pensando que solo lo está usando rmtrash.
Fayaz
1

Solo quiero agregar un hábito útil para aquellos que aún no lo hacen. Antes de usar rm para cualquier cosa, haz 'ls' en él primero. De esa manera puede ver todos los archivos que tiene la intención de eliminar. Luego, en lugar de volver a escribir, simplemente levante el comando 'ls' anterior e intercambie ls por rm. Este hábito ha reducido mucha ansiedad al invocar rm.

Scott Bridgman
fuente
-1

Introducción (puedes omitirlo)

Para mí rm -isería suficiente, porque te solicita antes de eliminar cualquier archivo. Sin embargo, cierta seguridad adicional proporcionada por safe-rmno es una mala idea en absoluto.

Un simple aliascomo rm=safe-rm -i podría ser suficiente, sin embargo rm -rf, no funcionaría, ya que -ise anula -f.

Por lo tanto, tenemos que asegurarnos de que -isiempre venga después -f.


Mi solución (3 pasos):

  • Instale safe-rm: brew install safe-rm

    Todavía puede trabajar con rm, pero debe modificar el RM_BINen el siguiente paso

  • Edite su ~/.profile(o bash_profile o lo que sea) y coloque el siguiente fragmento de código (que contiene una aliasy 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
    }
    
  • Finalmente , logouty login, entonces, se aplican las actualizaciones en el .profile. ¡NO lo use antes de cerrar sesión / iniciar sesión!


Notas:

  • Se puede aplicar a cualquier distribución de Linux, con ligeras modificaciones.
  • NO mueve a tu personal a golpear. ¡Solo te pregunta antes de eliminar cada archivo!
  • Funciona con -rfy con expresiones regulares.
  • Si realmente desea usar rm -rf SIN que se le solicite cada archivo / carpeta, aún puede usar /bin/rm -rf(o safe-rm -rfsi lo había instalado).
  • No más involuntario rm -rf o rm * ;)
Paschalis
fuente
55
Aliasar rm a algo más grande que sí mismo (p alias rm='sudo rm'. Ej. ) Es como atar un Uzi a un cuchillo de cocina: algún día obtendrás más de lo que esperabas al cortar esa piña. Aliasm rm a algo más pequeño que sí mismo (por ejemplo alias rm='rmtrash') es como dejar que sus hijos jueguen con granadas de mano desarmadas y no enseñarles lo que realmente son: algún día, cuando se encuentren con una real, no la tratarán con la debida precaución. De cualquier manera, ¡el alias rm es malo para su seguridad personal y salud pública!
Caleb
2
Usar algo como safe-rm es un consejo razonable. Aliasing a rm no lo es. Úselo con su propio nombre o un alias único para no dar por sentado una red de seguridad que no siempre estará allí.
Caleb
Entiendo tu argumento. PERO, la razón por la que hice esto, es que trabajo con muchas terminales ... algunas terminales remotas y algunas locales. Y quiero lanzar muchas granadas en los terminales remotos, pero cuando accidentalmente tire del sello de seguridad en el terminal local, quiero ver una advertencia antes de que ocurra la explosión .
Paschalis
@Paschalis y ¿qué sucede si se necesita usar un script o un programa instalado rm? Además, el punto de Caleb es aún más válido: si te acostumbras a un sistema con alias safe-rm, entonces podrías volverte imprudente y eventualmente usarlo en un sistema con un rm sin alias.
Manishearth