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

Uso la terminal a diario, a menudo usaré rm DirectoryName. A veces me impaciento un poco y lo hago rm *sin deliberar si es seguro. Como puedes imaginar, estas travesuras a veces han regresado y me han golpeado en la cara. ¿Alguien sabe cómo creo un mapeo para rm whatevermover todo a la papelera que luego elimino manualmente?

tu puedes hacermv /file/to/delete ~./Trash
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 devolverte a la seguridad. Además, ¿qué directorio Papelera quieres que use rm? Se vuelve torpe ya que Mac OS X tiene un directorio de basura para cada volumen, así como un bote de basura a nivel de usuario.
Si usa zsh, por defecto le avisará cuando haga rm *orm /path/*
Disculpas por mi comentario dramático, pero la misma pregunta me asusta ya que puedes hacer mucho daño con rm si no tienes ninguna copia de seguridad o la capacidad de reinstalar una máquina.
También quiero disculparme, mi comentario agregó drama y usé palabras "capaces" que no ayudan tanto como pueden lastimar a otros. He editado varios comentarios para que se mantenga la señal de “advertencia/peligro”, pero se elimine la personificación de una herramienta.

Respuestas (7)

Mala idea

Usar rmpara mover archivos a la papelera es un golpe de dopamina. Es común y placentero, pero puede ser malo para ti si lo sacas de contexto.

Realmente necesitas controlarte cuando usas rm. Especialmente si sus copias de seguridad no están actualizadas o no tiene tiempo para borrar/instalar/restaurar.


No use rm

Imagínate , te acostumbras a moverte a la basura y lo conviertes en un hábito. Claro, su sistema es seguro, pero ¿cuándo inicia sesión en el cuaderno de un amigo (o de su esposa o de su jefe) y tiene que borrar algo? De hecho, estarás usando lo real rm, eliminando esos archivos para siempre. Sin mucha preparación y calificadores, es un mal hábito, y debes saberlo.

Entonces, en su lugar, instálelo rmtrashy acostúmbrese a 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

Aquí es donde comienza el consejo personal: cambiar el comportamiento de uno es difícil. Otra cosa que puede hacer para forzarse a usar rmtrashen lugar de rmes crear un alias en un mensaje personalizado en su archivo .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 jamás, haz algo como esto:

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

Prueba sorpresa: ¿En qué directorio se rmejecutará el comando? :)

&&es tu salvavidas. ;es el diablo PD La respuesta es que casi todo en su sistema desaparece, en el ejemplo anterior.
Aunque, rm no hace una eliminación segura, pero moverse a la papelera / vacío sí lo hace (en mi configuración).
Los usuarios de Debian/Ubuntu instalan trash-clien su lugar, ej. aptitude install trash-cli- ver github.com/andreafrancia/trash-cli
@ jm666 Consulte también la basura ( publicación de blog y fuente ). Le pide a Finder que deseche los archivos. Además, también puede usar las API estándar del sistema de archivos Objective C (más rápido) y recurrir a Finder si no tiene suficientes derechos.brew install trash
rmtrashes realmente antiguo, ya que 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 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, resuelve el problema de mantener el mismo volumen, pero todavía faltan muchas rmopciones.
La mejor solución que encontré fue: "rm-trash", con ppa: nateshmbhat/rm-trash
Para aquellos en macOS: rmtrashya no se encuentra en homebrew, por lo que recomiendo instalar trashen su lugar: brew install trash.
Sin embargo, mirar la papelera de código cambió de usar Finder de forma predeterminada a simplemente moverse a ~/.Papelera
cd /tnp; rm -rf *comando del infierno
Esta es una gran respuesta SE de libro de texto.

Puedo pensar en una docena de formas de codificar esto, pero me niego categóricamente a escribir ninguna de ellas en una respuesta. Le recomiendo enfáticamente que frene su hábito de volverse un poco loco . No debe tener el hábito de usar rmnada si 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 esté en otra máquina algún día que no tenga las mismas protecciones personalizadas, hacer algo épicamente malo.

La solución adecuada es utilizarlo rmcomo debe ser, incluida la adición manual del -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. Intentar agregar "basura" a comandos que en el resto del universo no se usa es un paso a medio camino que es lo peor de ambos mundos.

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. Simplemente acostúmbrese a usar el rmtrashcomando en lugar de rm. Esto ayudará a su cerebro a comprender lo que está sucediendo y no creará un mal hábito que le causará dolor más adelante.

Su punto no computa en este caso. Las personas eliminan cosas accidentalmente todos los días, 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, mover a la papelera es una forma mucho más eficiente de manejar estas eliminaciones para mi particular caso de uso
@steve te perdiste el punto por completo. rmpor definición elimina un archivo del disco. No lo envía a la basura. Enseñarte a ti mismo a consumir rmcuando te refieres a enviar a la basura te prepara para el desastre. Si desea enviar a la papelera, usar rmtrasho un programa que fue diseñado para el trabajo, entonces no tendrá pesadillas más adelante. No estaba diciendo que usar la basura sea intrínsecamente malo, pero si quieres usarla, ¡no la conectes a algo que no estaba destinado a usarla!
brew install rmtrashy dejar de usarrm
Esta es una respuesta increíble, me aclaró algunas cosas. Intentaré formar el hábito de usar rmtrashen lugar de rm.
"rm por definición elimina un archivo del disco". No. rm desvincula el archivo. No lo quita.

Use una herramienta de línea de comandos como rmtrash (que generalmente solo mueve los archivos a ~/.Trash asegurándose de que el archivo tenga un nombre único) o una secuencia de comandos que usa appscript para llamar al Finder para realizar la eliminación. Este último es más lento pero agrega la capacidad de usar la opción Volver a colocar de Finder para restaurar el archivo fácilmente.

Utilicé basura tal como está en MacPorts y Homebrew y rmtrash ahora es muy viejo y no se mantiene. Sin embargo, al leer los cambios de código al editar esta nota, noté que en 2017 cambió de usar el Finder de forma predeterminada a moverse de forma predeterminada (que no es lo que quería y es un cambio importante). Así que buscaré otra herramienta.

Como se señaló en los comentarios, no es una buena idea hacer que rm sea un alias. Es mejor recordar usar el programa de basura que instaló directamente.

Pero si quisieras podrías hacerlo

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

alias rm='rmtrash'

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

Si usa una herramienta como rmtrash, hágase un favor y utilícela con su propio nombre . Nunca alias las cosas que no son rmpara rm, algún día te morderá.
rmtrashno es compatible con rm(no admite los mismos parámetros de línea de comando como -r) por lo que un alias realmente no es útil en ningún caso
Es una mala idea crear un alias rmtrashpara rm. No solo no son compatibles, sino que también reforzará el mal hábito y lo usará accidentalmente rmen otro sistema pensando que solo está usando rmtrash.

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

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

No crea ni por un minuto que cambiar el entorno de comando lo 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 robusta que he usado para evitar el peligro rmes configurar un proceso de copia de seguridad regular a través de cron sobre los directorios donde trabajo. Raw UNIX lo hace muy bien, con gran sencillez, usándolo findjunto con -mtimepara buscar archivos que se han actualizado dentro o desde un cierto tiempo.

Introducción (puede omitirla)

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

Un simple me aliasgusta rm=safe-rm -i podría ser suficiente, sin embargo rm -rf, no funcionaría, porque -iestá anulado por -f.

Entonces, ¡tenemos que asegurarnos de que -isiempre venga después -f!


Mi solución (3 pasos):

  • Instalar caja fuerte-rm:brew install safe-rm

    Todavía puede trabajar con rm, pero ha modificado 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 una 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, para que se apliquen 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 su personal a la basura. ¡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 ha instalado).
  • No más involuntarios rm -rf o rm * ;)
Aliasing rm a cualquier cosa más grande que sí mismo (por ejemplo, alias rm='sudo rm') es como atar una Uzi a un cuchillo de cocina: algún día obtendrá más de lo que esperaba cuando vaya a cortar esa piña. Alias ​​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 los administradores de sistemas, ya que la falta de higiene es para la seguridad personal y la salud pública.
Usar algo como safe-rm es un consejo razonable. Ponerle un alias a rm no lo es. Úselo con su propio nombre o un alias único para no dar por sentada una red de seguridad que no siempre estará allí.
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 a las terminales remotas, pero cuando accidentalmente tiro del sello de seguridad de la terminal local, quiero ver una advertencia antes de que ocurra la explosión .
@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 de rm seguro, entonces podrías volverte imprudente y eventualmente usarlo en un sistema con un rm sin alias.
También tenga en cuenta que hay varias encarnaciones diferentes de safe-rm. Un complemento ZSH para mover archivos a la papelera, un script de Perl para incluir en la lista negra carpetas importantes, etc. y una versión Rust del mismo.

Mac BigSur

brew install trash

alias rm='trash'
which rm

touch a.md
rm a.md
ls ~/.Trash
¿Por qué esto solo funciona en Big Sur?