¡Has eliminado (casi) todo tu directorio de inicio!
rm -r something
elimina recursivamente archivos y directorios en / debajo de algo ; solo fallará en los elementos que no tiene permiso para eliminar, ya sea porque son propiedad de un usuario diferente (por ejemplo root
) o porque están en uso (por ejemplo, un montaje GVFS).
Si no agregó -f
(como en, rm -rf something
), obtendrá algo como:
rm: remove write-protected regular file ‘something’?
rm: descend into write-protected directory ‘something’?
En este punto, puede abortar y probablemente se dé cuenta de que ejecutó el comando incorrecto.
Sugerencias de la comunidad sobre cómo evitar tales accidentes.
Nota: Wiki de la comunidad, todos pueden contribuir.
Para algunos archivos, use la -i
opción para obtener una confirmación sobre la eliminación de archivos o directorios:
$ rm -ri something/
rm: remove regular file ‘something/file~’? y
rm: descend into directory ‘something’? y
rm: remove regular file ‘something/file’? y
rm: remove directory ‘something’? y
Si se elimina de un directorio actual, agregue el prefijo a ./
para evitar eliminar por error una ubicación diferente .:
$ cd something
$ rm -v ./*~
removed ‘./file~’
Lo anterior fue para demostrar el uso de ./
. Si hay un subdirectorio, por supuesto, también puede usarlo rm -v something/*~
. Cuidado : no piense que rm ./.*
elimina todos los archivos ocultos en el directorio actual. Consulte esta pregunta de Serverfault para obtener soluciones sobre el ocultamiento de archivos ocultos.
Mover en lugar de eliminar: en lugar de eliminar archivos de forma recursiva en primer lugar, me acostumbré a mover los archivos de los que quiero deshacerme en otro lugar antes de eliminarlos finalmente. Si algo salió mal es fácil de restaurar.
mv -b SOURCE DEST
Use find
(posiblemente con grep
) para obtener una vista previa si desea eliminar de forma recursiva los archivos seleccionados. Deberías tratar de hacer que esto sea algo raro, pero si tienes que ...
find
sin argumentos enumera recursivamente todos los archivos / directorios bajo el actual. Debería intentar buscar man find
cómo hacerlo selectivo (un tesoro), pero si no quiere molestarse, puede usar el familiar grep
para filtrar los archivos que desea eliminar.
- Supongamos que soy un hacker de kernel uber-l33t, y me molestan los pocos KB de archivos "de ejemplo" en mi árbol fuente; Quiero eliminar todos los archivos que contengan eso en el nombre. Entonces escribo
find | grep example
, lo que me da estos 20 archivos. Eso se ve bien, así que ahora voy y elimino esos archivos exactos, junto con la rm -v
salida detallada mencionada anteriormente, a través de xargs
:
encontrar | ejemplo grep | xargs rm -v
lo que me da esta salida. Este tipo de problemas impide la vista preliminar, donde dicen, se hace un error tipográfico y escribir sample
en lugar de example
.
La solución anterior no debe usarse si puede tener nombres de archivo que contengan espacios, caracteres de tabulación, líneas nuevas o comillas ( "
o '
), ya que esto conducirá xargs
a un error o se alimentará rm
con nombres de archivo incompletos, que en el peor de los casos podrían terminar eliminando el incorrecto archivos. La forma segura de hacer lo anterior es hacerlo todo con find
los operadores y las acciones.
Lo siguiente mostrará todos los archivos que contienen la palabra example
find . -name "*example*"
Si esa lista son los archivos que desea eliminar, use la -exec
acción para pasar los archivos rm
.
find . -name "*example*" -exec rm -v {} +
Consulte Uso de Buscar para obtener más ayuda con el uso find
.