domingo, 12 de abril de 2009

Un pequeño truco

A veces hay que trabajar en línea de comandos (o mejor, línea de órdenes) con nombres de ficheros con espacios. Y es un problema pasarlos por las tuberías (pipes), porque estas interpretan los espacios como separación entre argumentos.

Pongamos un ejemplo: hoy enchufé mi disco externo a un ordenador Windows y se me llenó de ficheros llamados Thumbs.db. Es un problema borrarlos uno a uno, así que lo más cómodo es usar find de una manera como ésta:

find . -name Thumbs.db | xargs rm -rf


Pero no funciona. Un fichero que se llame mountpoint/Mi Carpeta/Thumbs.db será entendido por xargs como dos ficheros distintos, mountpoint/Mi y Carpeta/Thumbs.db, que por supuesto no existen.

La solución es tan sencilla como:
find . -name Thumbs.db | sed '{s/ /\\ /g}'| xargs rm -rf
utilizando sed para escapar los espacios. Ojo, que no funcionará sin las comillas sencillas para escapar las barras invertidas.

No hay comentarios: