Cómo evitar eliminar por error un archivo con el comando rm en Linux

Veamos como evitar eliminar un archivo por error mediante el comando rm desde la terminal en GNU/Linux

Estamos trabajando en una terminal de nuestro sistema GNU/Linux y estando seguros de lo que hacemos, con los dedos planeando el teclado a toda velocidad, sin querer eliminamos un archivo con el comando rm que no queríamos borrar…

Nuestros dedos se detienen en el acto y asumimos lo ocurrido con una mezcla de pánico, tensión y culpabilidad… ¿podemos recuperar ese archivo?

La respuesta corta es: no. O por lo menos no, con las herramientas habituales de nuestro sistema.

La respuesta larga es sí: podremos utilizar herramientas disponibles para recuperar ese archivo.

La respuesta para el futuro es: vamos a ver algunas soluciones para impedir este sufrimiento en el futuro.

Si no ha pasado mucho tiempo desde que lo hemos eliminado hasta que nos hemos dado cuenta del error, quizás el sistema no haya sobre escrito nada en el lugar que ocupaba ese archivo y quizás haya una posibilidad de recuperación.

Hay herramientas forenses para la exploración del sistema de archivos y para tratar de recuperar aquello que deseamos. Y otras herramientas con interfaz gráfica para estas lides, así la que conozco y he utilizado alguna vez fue PhotoRec.

Pero este artículo no trata tanto sobre cómo recuperar un archivo que hemos borrado con el comando rm de GNU/Linux, si no más bien de cómo impedir que nos suceda en el futuro.

rm interactivo

Una opción para impedir eliminar archivos no deseados es utilizar la versión interactiva del comando rm (-i) En la versión interactiva del comando, este nos preguntará si deseamos borrar el archivo. Para ello añadiremos el siguiente alias, en el archivo de configuración de nuestra shell (.bashrc, .zshrc o la que utilicemos)

alias rm="rm -i"

Es decir, nos da una oportunidad antes de borrar el archivo por completo. No impide el error, pero sí hace que quizás antes del «desastre» nos llegue un rayo de iluminación y seamos conscientes de nuestro incipiente error, pudiendo decir a rm que no borre el archivo que le habíamos mandado.

Muy bien, esto parece ser una solución interesante si queremos borrar 1 o 3 o 5 o incluso 10 archivos. Nos pedirá 1, 3, 5 o 10 confirmaciones, algo manejable… pero ¿qué pasa si queremos borrar 100 archivos, y es algo habitual en nuestro flujo de trabajo?

Es algo exasperante tener que confirmar 100 eliminaciones de archivos, al final, dejaremos de prestar atención a los archivos que nos presenta y quizás borremos alguno que no queríamos.

Utilizar una «papelera de reciclaje»

Cuando utilizamos un gestor de archivos con interfaz gráfica como Dolphin, Thunar, etc, estamos acostumbrados a que al borrar un archivo, este pasa a una papelera antes de ser eliminado por completo.

Podemos echar un vistazo a esa papelera y volver a recuperar los archivos que queramos porque los hayamos borrado por error. ¿Por qué no tener algo así en la consola? Veamos cómo tener algo similar.

Lo primero, vamos a crear una carpeta oculta en nuestro /home. Ya sabéis que anteponiendo un punto (.) a un nombre de archivo o carpeta, en sistemas GNU/Linux esto hace que sea oculto. Para ello ejecutaremos:

$ mkdir ~/.Papelera

Esto nos creará la carpeta oculta llamada Papelera en nuestro /home. Podemos ver que existe con el comando ls -a Y veremos no solo nuestra carpeta recién creada, si no también los archivos ocultos en nuestro /home.

Después tendremos que crear un alias (ya sabes en .bashrc, zshrc o el que utilices) para el comando rm que a partir de ahora utilizaremos como del (viene de delete, pero puedes llamarle como prefieras). En ese archivo añadiremos la siguiente línea:

alias del='mv --verbose --backup=simple --suffix=$(date +".(%F_%T)") --target-directory=$HOME/.Papelera/'

Ahora cuando queramos eliminar un archivo lo haremos con del, en vez de con rm. Con esto no se borrarán los archivos, simplemente se moverán a la carpeta oculta Papelera y podremos recuperar los archivos en caso de error.

Si borramos archivos que tienen el mismo nombre, este alias irá añadiendo fecha y hora al nombre para diferenciar uno de otro.

De vez en cuando tendremos que ir borrando el contenido de la carpeta .Papelera, para que no empiece a ocupar mucho sitio e nuestro sistema, albergando todos los archivos que vayamos eliminando.

Quizás una tarea cron o similar pueda servirnos para ir vaciando esa carpeta de manera regular (quizás una vez al mes o similar…)


¿Qué te han parecido estas soluciones alternativas para evitar errores? ¿Te ha pasado alguna vez eso de borrar un archivo que no deberías? ¿Conoces o utilizas otros métodos/herramientas? Compártelo en los comentarios para ayudar a otras personas.

Fuente del artículo:

4 comentarios sobre “Cómo evitar eliminar por error un archivo con el comando rm en Linux

  1. Nada más empecé a leer el artículo se me ocurrió una opción que pensé que sería válida. Transformar rm en un comando de root moviéndolo al /usr/sbin y creando enlace en /sbin. Pero creo que no solucionaría gran cosa si no tiene, como has dicho, el -i. Lo de la papelera en consola es muy ingenioso por eso.

  2. Viendo esto me ha dado una idea que se podría aprovechar el directorio que utiliza dolphin u otros para su papelera.
    En este caso $HOME/.local/share/Trash
    así me he creado un script que cuando borras un archivo o lista de archivos . los pone en esa ruta, creando las cosas para que dolphin lo reconozca dentro de la papelera.
    Sería una cosa tal que así

    #!/bin/bash
    for i in "$@"; do
            rutacompleta=`readlink -f $i`
            archivo=`basename $rutacompleta`
            n=1
            while [ -f "$HOME"/.local/share/Trash/files/"$archivo" ];
            do
                    archivo="$archivo ($n)"
                    let "n+=1" 
            done    
            mv "$rutacompleta" "$HOME"/.local/share/Trash/files/"$archivo"
            echo "[Trash Info]"> "$HOME"/.local/share/Trash/info/"$archivo".trashinfo
            echo "Path=$rutacompleta">> "$HOME"/.local/share/Trash/info/"$archivo".trashinfo
            echo "DeletionDate=`date +%Y-%m-%dT%T`">> "$HOME"/.local/share/Trash/info/"$archivo".trashinfo
    done
    

    Eso si es una primera versión que no eliminar directorios ni subdirectorios, solo archivos…. se podría mejorar y que nos sirviera para todo.

Me gustaría saber tu opinión. Deja un comentario (Puedes usar MarkDown)

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Salir /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Salir /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Salir /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Salir /  Cambiar )

Conectando a %s

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.