gedit crea archivos de copia de seguridad ocultos que terminan en '~'. Quería hacer una limpieza recursiva de mi árbol de directorios.
El comando rm *~
eliminará todos los archivos locales que terminen en '~'
Pensé rm -r *~ .
que eliminaría todos los archivos en todo el árbol, pero escribí mal rm -r ~
.
Hubo un mensaje que no se pudo eliminar algún directorio y salí del comando. La pregunta es: ¿qué he estado eliminando?
Me di cuenta de que mi configuración de Filezilla había desaparecido. ¿Este comando elimina todos los directorios ocultos del directorio de inicio?
command-line
bash
GUI Junkie
fuente
fuente
-r
menos que quiera deshacerme de todo.rm -r *~ .
eliminaría todos los archivos y carpetas (en el directorio actual) que coincidan*~
o.
. (.
sería ignoradorm
como una excepción especial, ya que la mayoría de la gente no quiere eliminar recursivamente el directorio actual. Esto*~
elimina todos los archivos y directorios en el directorio actual que terminan en~
, pero no los archivos y directorios en subdirectorios del directorio actual. ) Entonces eso no es lo que hubieras querido. Probablemente hubiera querido usarfind
con el-exec
indicador para mirar recursivamente a través del árbol de directorios y eliminar no recursivamente cada archivo que termina en~
.~
personaje sin escapar (así\~
:) hará que Bash, ZSH, etc. (elrm
comando básicamente) piense que te refieres al directorio de inicio.Respuestas:
¡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 ejemploroot
) o porque están en uso (por ejemplo, un montaje GVFS).Si no agregó
-f
(como en,rm -rf something
), obtendrá algo como: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.
Para algunos archivos, use la
-i
opción para obtener una confirmación sobre la eliminación de archivos o directorios:Si se elimina de un directorio actual, agregue el prefijo a
./
para evitar eliminar por error una ubicación diferente .:Lo anterior fue para demostrar el uso de
./
. Si hay un subdirectorio, por supuesto, también puede usarlorm -v something/*~
. Cuidado : no piense querm ./.*
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.
Use
find
(posiblemente congrep
) 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 buscarman find
cómo hacerlo selectivo (un tesoro), pero si no quiere molestarse, puede usar el familiargrep
para filtrar los archivos que desea eliminar.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 larm -v
salida detallada mencionada anteriormente, a través dexargs
: lo que me da esta salida. Este tipo de problemas impide la vista preliminar, donde dicen, se hace un error tipográfico y escribirsample
en lugar deexample
.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 confind
los operadores y las acciones.Lo siguiente mostrará todos los archivos que contienen la palabra
example
Si esa lista son los archivos que desea eliminar, use la
-exec
acción para pasar los archivosrm
.Consulte Uso de Buscar para obtener más ayuda con el uso
find
.fuente
find
salida de tuberíasgrep
yxargs rm
es peligrosa.mv
(mi comando favorito);)find
seguro, uno que no se rompa (y potencialmente elimine los archivos incorrectos) si los nombres de archivo contienen espacio, tabulación, nueva línea"
o'
caracteres. Por ejfind . -name "*example*" -exec rm -v {} +
. mywiki.wooledge.org/UsingFindfind -delete
por qué es tan peligroso? Hubiera dicho algo aquí, pero no sé más que lo que encontré y borré recientemente a/
pesar de una ejecución en seco sin opción,-delete
solo encontré algunos archivos que quería eliminar. Veo que me recomiendan en su-exec rm
lugar.-delete
no es peligroso, y puedes usarlo de forma segura en lugar de hacerlo-exec rm {} +
. Generalmente prefiero usar herramientas y características estándar cuando sea posible.-delete
es una extensión GNU no estándar,find
por lo que funcionará bien en Ubuntu, pero puede que no en otros sistemas.Si. Un personaje tilde sin comillas como argumento separado se expande a su homedir. Así
rm -r ~
se expandió arm -r /home/yourusename
. Entonces le dijiste a rm que borrara recursivamente todos los archivos en tu homedir.Consulte http://www.gnu.org/software/bash/manual/bashref.html#Tilde-Expansion para obtener más información sobre cómo funciona la expansión tilde.
fuente