2 votos

Específico: efecto de rm -r /./*

Estaba intentando borrar archivos dentro del directorio actual con rm -r /./* mando. Al ejecutarlo me advirtió sobre la eliminación de "...Siri..Application". Me asusté un poco, pensando que estaba intentando eliminar todos los archivos del sistema y terminé inmediatamente el proceso del terminal. Quiero saber si este comando eliminó algún otro archivo. Veo la mayoría de los archivos allí y soy capaz de reiniciar el iMac por lo que todo parece estar bien, pero sólo para estar seguro.

PD: perdón por la falta de un mensaje de advertencia completo. Cerré rápidamente el terminal y no voy a intentar comando de nuevo para conseguirlo.

5 votos

Efectivamente, ese comando intentará borrar todos los archivos de todo tu ordenador. Las versiones recientes de MacOS protegen muchas cosas, lo que provoca errores como los que has visto. Pero los errores no le dirá qué archivos se hizo o cuáles no había podido borrar antes de que lo mataras. Va a ser difícil saber qué se ha borrado hasta que notes que falta algo. Comprueba las aplicaciones de terceros que hayas instalado, ¿todavía están ahí?

1 votos

Eso parece. Recuerdo algunas de las aplicaciones que instalé y están ahí. ¿Existe alguna forma de enviar los resultados del comando al terminal? ¿O debería hacer un restablecimiento de fábrica? TIA

7voto

siva Puntos 23

La ruta que le diste a rm para borrar era /./* . Vamos a desglosar esto:

  1. / El punto de montaje root, como Macintosh HD. Se trata de root del disco, por lo que se ha indicado una ruta absoluta en lugar de una ruta relativa que opera en el directorio actual.
  2. ./ El directorio actual, que ahora es / por el camino dado hasta ahora. /. es equivalente a / Así que // es la ruta hasta ahora, excepto que los delimitadores de directorio duplicados se combinan en un único delimitador, por lo que / hasta ahora, lo mismo que en el paso 1.
  3. * Glob todos los archivos y carpetas en este nivel.

Por lo tanto, el comando dado fue borrar todos los archivos y carpetas comenzando en el punto de montaje root, es decir. eliminar todos los archivos y carpetas de todo el volumen .

La Protección de Integridad del Sistema de MacOS evitará que esta travesura cause mucho daño a los componentes principales del sistema, pero tus propios archivos no estarán protegidos si has dado acceso total al disco a la app Terminal. Espero que tengas una copia de seguridad de los archivos que necesites, especialmente desde el principio del disco dependiendo de cuando hayas detenido el comando.

0 votos

Por desgracia para mí no tenía la última copia de seguridad. No importa, aunque puedo empezar de nuevo. La parte difícil es averiguar lo que se fue. Si puedo preguntar, ¿cuál fue el comando correcto para eliminar todos los archivos de forma recursiva en la carpeta actual. (He intentado ./* como ruta que no funcionó)

0 votos

@User10482 solo reinstala el sistema desde recovery hd o internet recovery. Que los archivos del sistema antiguo, cae un funcionamiento completo con todas las aplicaciones integradas y luego migra todos los usuarios, configuraciones, datos y aplicaciones de terceros. A menos que pagues por software o servicios profesionales de recuperación, recuperar los archivos borrados es algo largo y no está garantizado si has seguido usando el sistema y has empezado a sobrescribir el espacio donde se almacenaban los archivos borrados.

0 votos

@user Todo lo que quieres es el paso 3, así que rm -r * desde el directorio correcto.

3voto

laurent Puntos 141

Algunos recordatorios, por supuesto todo está en las páginas man.

  • / es el "separador de rutas", es decir, el carácter que separa los nombres de las carpetas (y, opcionalmente, de los archivos del terminal).
  • Las rutas pueden ser relativas (al directorio de trabajo actual) o absolutas (es decir, desde la carpeta root) y una ruta que empiece por / es absoluta. Las demás son relativas.
  • las carpetas tienen "entradas" que pueden ser de varios tipos, normalmente carpetas y archivos (pero no sólo)
  • el comando rm toma una lista de archivos a borrar, y tiene la opción "-r" que significa : recursivo, en ese caso, puede tomar una carpeta como argumento.
    • las carpetas siempre tienen entradas especiales: "." y ".." que son nombres especiales de carpetas correspondientes a las carpetas "actual" y "padre".
    • Los comandos en el terminal son ejecutados por un shell, hay muchos shells, normalmente puedes encontrar tu shell usando "echo $SHELL", uno popular es "BASH". En la mayoría de los shells "*" es un "glob character", por ejemplo, abre el manual de bash (ejemplo: ejecuta: "man bash" en un terminal) y luego busca "Pathname Expansion", por ejemplo escribiendo "/Pathname Expansion", también puedes buscar "GLOBIGNORE". El comportamiento de la expansión puede ser controlado por algunas env vars y configuraciones del shell, pero podemos asumir que usas el valor por defecto, que es "reemplazar por todas las entradas que coincidan con el glob, pero que no empiecen por '.' ".

Así, el shell ejecutará el comando de la siguiente manera: rm -r /./*

  1. dividir la línea de comandos en elementos, separados por "espacios en blanco" : "rm" , "-r" y "/./*"
  2. aplicar una serie de transformaciones, en este caso sólo la expansión del nombre de la ruta del archivo " " (ejemplo de otras transformaciones: expansión de variables) a. con " "considera que el elemento es un camino b. La ruta se divide en elementos separados por "/" : "" , "." y " " c. como el primer elemento está vacío, se trata de una ruta absoluta que comienza en / (o se puede considerar que "/./ " comienza con "/" por lo que es absoluta, y luego eliminar de la lista ..) d. ok, en la carpeta root busque la entrada "." : está ahí, y de hecho informa a la misma carpeta en la que está, es decir "/" e. en esta carpeta (/), busque todas las entradas (carpetas y archivos) no cadena con "." f. sustituya el elemento globalizado en el paso 1 por la lista encontrada, es decir, obtendrá algo como: rm -r /./carpeta1 /./carpeta2 /./archivo1 ...
  3. ejecutar el comando resultante, creando un nuevo proceso cuyo ejecutable esté especificado por el primer elemento de lista en 1. a. si el primer argumento empieza por / es una ruta absoluta, sino el ejecutable se busca en las carpetas especificadas por la variable PATH b. otros elementos de la lista se proporcionan como argumento para el nuevo proceso : "-r" , "/./carpeta1", "/./carpeta2", "/./archivo1" etc...
  4. el comando rm eliminará recursivamente las carpetas y archivos especificados por la lista de carpetas y archivos ahora expandida.

La verdadera clave aquí es que los comandos en terminal son ejecutados por el shell, y un tric

e

$ echo rm -r /./*
rm -r /./Applications /./Library /./Network /./System /./Users /./Volumes /./bin /./cores /./dev /./etc /./home /./installer.failurerequests /./net /./opt /./private /./sbin /./tmp /./usr /./var

M

$ cd ..
$ rm -fr folder_to_cleanup
$ mkdir folder_to_cleanup

T

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X