Acabo de perder algunos datos en la carpeta A que estaba dentro de la carpeta B después de hacerlo rm -rf B
. Antes de que pudiera darme cuenta de lo que había hecho, todo había terminado. Ahora que se aprende una lección, deseo hacer que mi carpeta sea a prueba de idiotas para evitar la próxima vez que haga algo similar y quiera suicidarme.
Una forma en la que puedo pensar es escribir una función bash y asignarle un alias rm
. Esta función buscará en cada subcarpeta un archivo oculto como .dontdelete
. Cuando lo encuentre, me preguntará si realmente quiero continuar. No puedo hacer que esté protegido contra escritura ya que hay un proceso que escribe constantemente en esta carpeta. ¿Hay alguna forma mejor de hacerlo?
permissions
directory
rm
Dilawar
fuente
fuente
rm
pararm -i
:> -i solicitar antes de cada eliminación o> -I solicitar una vez antes de eliminar más de tres archivos, o al eliminar de forma recursiva. Menos intrusivo que -i, a la vez que brinda protección contra la mayoría de los errores. Puede sobrescribir aquellos con otras banderas en cualquier momento.safe-rm
tmpwatch
para eliminar archivos de esta carpeta cada hora.Respuestas:
Al investigar su pregunta, encontré esta técnica que podría ayudarlo en el futuro.
Aparentemente puede tocar un archivo en el directorio de esta manera:
Ahora, cuando ejecuta el comando
rm -fr *
en un directorio donde-i
está presente, se le presentará el mensaje interactivorm
.Lo mismo se puede lograr simplemente dejando un alias en el lugar para
rm
hacerlo siemprerm -i
. Esto puede ser molesto. Muy a menudo, lo que he visto es tener este alias en su lugar y luego deshabilitarlo cuando realmente desea eliminar sin que se lo solicite.Ahora en los directorios serás recibido así:
Para anular el alias:
Sin embargo, esto todavía no se detiene
rm -fr
. Pero te proporciona cierta protección.Referencias
fuente
--force
algo, lo dices en serio.rm -I
(mayúsculai
) podría ser útil en un alias, ya que es un poco menos intrusivo (según la página de manual, solo se le solicita si elimina más de tres archivos o de forma recursiva).touch ./-i
truco solo funciona con GNUrm
y solo si la variable POSIXLY_CORRECT no está establecida (los comandos POSIX no reconocen las opciones después de los argumentos).Muchas posibilidades:
alias rm='rm -i'
- rm preguntará - a menos que especifique-f
...chmod -w dir
- protege los archivos directamente en ese directorio.chattr +i
si realmente lo dices en serioPero una mejor manera es probablemente tener una buena copia de seguridad y mantener datos importantes en algún tipo de control de versiones (como
git
), lo que también trae muchas otras ventajas.fuente
rm -i
pero como era de esperar, no funciona con la-f
opción. Uso git para muchos otros propósitos, pero ¿qué sucede si accidentalmente también lo hagorm -rf *
en git?Use un software de control de versiones como
git
para encapsular sus proyectos.Mientras no elimine un proyecto completo, deberá escribir
rm -rf .*
a propósito para eliminar el.git
directorio y perder todos los datos necesarios para una reversión.Esto tiene el beneficio adicional de que puede enviar copias de seguridad de sus cosas a un servidor remoto como github o bitbucket.
fuente
Así es como
rm -rf dir
funciona:dir
y enumera su contenido.unlink
.Si pudiera, para la lista del directorio, devolver primero un nombre de archivo especial, y si pudiera hacer que un proceso que realiza un
unlink
archivo falle, eso resolvería el problema. Eso podría hacerse usando un sistema de archivos de fusibles.Por ejemplo, podría adaptar el
loopback.pl
ejemplo del módulo perl Fuse que solo implementa un sistema de archivos ficticio que es solo un paso a un sistema de archivos real debajo de este modo (vea también el parche a continuación):.{{do-not-delete}}.
, anteponga la lista de entradas con dos archivos:.{{do-not-delete}}!error
y.{{do-not-delete}}!kill
unlink
el primero, devuelva elEPERM
código para querm
aparezca un mensaje de errorunlink
el segundo, el proceso se mata.Aquí un parche para aplicar sobre ese
loopback.pl
ejemplo como prueba de concepto:fuente
He creado un script para facilitar esta tarea. El script de shell modifica el permiso de lectura / escritura y el indicador de chat de una lista dada de carpetas de forma interactiva, sin solicitar una contraseña de root. Puede descargar el archivo zip desde el enlace que figura a continuación.
https://drive.google.com/file/d/0B_3UYBZy2FVsMVpBSWdSWnFBYk0/edit?usp=sharing
También he incluido un script de instalación para facilitar la configuración. Las instrucciones están incluidas en el archivo zip.
fuente