Skip to content

Elimina los ficheros .DS_Store desde Terminal.app

20 noviembre 2011

Como ya comenté en la entrada Eliminar ficheros .DS_Store con Onyx, los ficheros .DS_Store son unos ficheros ocultos que Mac OS X utiliza para almacenar ciertos metadatos como por ejemplo la posición del icono en pantalla. Como sabéis, estos ficheros en Mac OS X y en Linux permanecen ocultos, pero en Windows se vuelven visibles. Si por ejemplo utilizamos un pendrive USB de un/a compañero/a en nuestro Mac, cuando él/ella lo conecte en su PC con Windows, verá una gran cantidad de ficheros .DS_Store que para él/ella no tienen ninguna utilidad. Por eso, en esta entrada vamos a ver cómo podemos eliminar esos ficheros de una memoria USB (o de cualquier directorio que nos interese) simplemente ejecutando un comando desde Terminal.app.

En primer lugar vamos a ver el comando final y vamos a ir poco a poco desglosando dicho comando para comprender cómo funciona y evitar eliminar algún fichero importante. Lo primero que debemos hacer es, desde Terminal, navegar hasta la ruta en la que se encuentre el pendrive USB ya montado. Suele estar en /Volumes/<nombre_dispositivo>. Una vez nos encontremos en esta ruta, vamos a echar un vistazo al comando:

rm -rf `find . -type f -name .DS_Store`

Veamos la segunda parte del comando:

find . -type f -name .DS_Store

Find es un comando de los sistemas UNIX que nos va a permitir realizar una búsqueda en nuestro sistema de ficheros especificando ciertos criterios de filtrado. En esta ocasión estamos utilizando dos criterios: Le estamos diciendo a find que busque todos los archivos de tipo fichero (-type f) y cuyo nombre sea .DS_Store (-name .DS_Store). Además si prestáis atención al comando, justo después de find, veréis que hay un punto. Este punto indica el directorio sobre el que queremos realizar la búsqueda. Al especificar un punto le estamos diciendo que nos busque en el directorio en el que nos encontremos actualmente. Por eso antes comentaba que lo primero que debemos hacer es navegar hasta la ruta en la que se encuentra el pendrive USB montado. Si lo preferimos, podemos sustituir este punto por la ruta del pendrive, con lo que nos evitamos un paso.

Si ejecutamos este comando find, veremos que nos muestra un listado de todos los ficheros .DS_Store que ha encontrado en la ruta especificada, además nos mostrará junto a cada fichero su ruta absoluta. Aquí podemos verificar que sólo nos muestra los ficheros .DS_Store que son los que nos interesa borrar. Si este listado comprobamos que es correcto, podemos ejecutar sin miedo el primer comando que os mostraba.

Para este primer comando hay que prestar atención a un detalle: El acento grave (`), es el acento que está junto a la letra P (al menos en mi teclado). Si observáis el primer comando que os muestro aquí, veréis que estamos englobando el comando find entre acentos grave. Esto es así ya que lo que realmente le estamos diciendo es: Quiero utilizar la salida que devuelve el comando find, como entrada para el comando rm…, es decir, primero ejecuta el comando find, y lo que te devuelva este comando, se lo pasas como entrada al comando rm. Por eso debemos englobar el comando find entre este tipo de acento.

Como veis, con un simple comando podemos eliminar todos los ficheros .DS_Store que nos interese de una forma fácil y rápida. Lo interesante de este comando, es que al ser tan sencillo, podemos preparar un script muy simple que realice esta tarea o incluso implementarnos una tarea de Automator que nos permita realizar todo este proceso desde Finder.

Como siempre, cualquier duda, sugerencia, mejora, … será siempre bien recibida 😉

Anuncios
2 comentarios leave one →
  1. v3rdepollo permalink
    6 julio 2012 21:38

    Esta opción es -unos cuantos milisegundos- más rápida al no tener el shell que ejecutar dos comandos dependientes de forma secuencial.

    find . -type f -name “*.DS_Store” -exec rm -f {} +

    Además es más seguro en el caso de que hipotéticamente existieran millones de archivos con la terminación “.DS_Store” o por si hubiera un archivo que tuviera un nombre con espacios como “Archivo temporal 2012.DS_Store” en cuyo caso el comando original propuesto terminaría con error.

    • rekkeb permalink*
      8 julio 2012 11:43

      Genial! Muy buena aportación, muchas gracias 😉

Responder

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. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: