martes, 20 de marzo de 2012

Cómo hacer un renombrado masivo desde la terminal

He decidido empezar a utilizar este blog también para compartir con todo aquél a quien le interese esos truquillos de GNU/Linux que utilizo y que no son tan sencillos de encontrar por ahí. En este artículo vamos a abordar un problema que a mí en el trabajo se me plantea constantemente: el de renombrar un porrón de archivos a la vez conforme a un cierto patrón. Esto que voy a explicar vale tanto para fotografías, como para archivos de texto como para cualquier otro tipo de documento.


Supongamos que tenemos una serie de documentos metidos en una carpeta, pero no queremos renombrarlos todos, sino sólo aquellos cuyo nombre comienza por FTransform (es decir, se trata de aquellos archivos cuyo nombre corresponde a las cadenas FTransform* . Si no te suena lo que pueda ser ese asterisco, te recomiendo que mires por ejemplo aquí lo que son los metacaracteres de la shell de Linux). Lo que queremos es convertirlos en una secuencia de archivos de la forma FourierTransform.Número, donde Número va a ser un entero de 7 dígitos empezando en el 0000001. Si hubiese 758 archivos de la forma FTransform* al final lo que obtendremos será una secuencia de archivos  de la forma FourierTransform.0000001 a FourierTransform.0000758

Para hacer esto tendríamos que ingresar la siguiente línea de comando:

$ ls FTransform* | nl -nrz -w7 | while read a b; do mv "$b" FourierCoefs.$a ; done

Vamos a entender un poco qué hace este comando. Las barras verticales son entubamientos (pipes). Si no te suenan puedes mirar qué son en el mismo enlace de antes. El comando ls muestra todos los archivos que se correspondan con la cadena FTransform*, nl cuenta el número de líneas de la salida del comando anterior, y la opción -w7 hace que muestre el resultado en forma de entero de 7 dígitos. Por último, el bucle while do itera tantas veces como archivos haya encontrado, renombrando en cada uno de los pasos un archivo con un número diferente al anterior, sumando uno en cada ciclo.

Supongamos ahora que, en la secuencia anterior, por algún motivo no deseamos que la serie empiece en 1, sino en un valor superior. Digamos que queremos que el primer valor sea, en lugar de el 000001, 
el 1000001. Podríamos entonces hacer lo siguiente: 

rename -v 's/FourierCoefs.(\d{7})/FourierCoefs.1$1/' FourierCoefs.*

El comando rename, que como su nombre ya sugiere sirve para renombrar archivos, utiliza expresiones regulares de Perl, que tienen una sintaxis muy particular y no voy a entrar en ello; en Internet hay suficiente información. Me limitaré a explicar por encima qué hace la línea de consola anterior: la opción -v hace que se muestre por pantalla el nombre del archivo modificado, lo que está entre comillas ('  ')  es la expresión regular, y el último término de la derecha es el nombre del archivo que queremos renombrar, en este caso, todos los archivos que comiencen por FourierCoefs. . 

La expresión regular está formada por tres trozos separados por barras diagonales ( / ). El primero es simplemente una letra s, que indica que lo que vamos a hacer es sustituir el segundo bloque por el tercero. El segundo es el nombre original del archivo, en este caso FourierCoefs. seguido de una cadena de 7 caracteres que almacenaremos en memoria (\d{7}). El tercer bloque es el nuevo nombre del archivo, que quedará como FourierCoefs.1 seguido de la cadena que almacenamos en el bloque 2, y a la que hacemos referencia con la variable $1. 

Para más información acerca de los comandos empleados, os recomiendo consultar el manual, y desde luego, preguntarle a Google.

Espero que esta información le resulte útil a alguien más :)


Adenda:

Por si a alguien le preocupa que los archivos aparezcan sin extensión, añado este párrafo. Si quisiésemos que en lugar de de la forma FourierTransform.0067201 los archivos de salida nos quedasen por ejemplo de esta otra manera,  FourierTransform.67201.txt, lo único que tendríamos que hacer sería cambiar -w7 por -w5 y Fouriercoefs.$a por Fouriercoefs.$a.txt en la primera línea, quedando entonces

$ ls FTransform* | nl -nrz -w5 | while read a b; do mv "$b" FourierCoefs.$a.txt ; done

Las modificaciones para el segundo comando son igualmente sencillas.


viernes, 24 de febrero de 2012

Reflexiones sobre policías "heridos o solamente lesionados" - #PrimaveraValenciana

Hablando con un conocido sobre los sucesos de los últimos días en Valencia, me dice un conocido:
"Hubo muchos más policías heridos que manifestantes. Explicaciones posibles: 1) La policía está mal entrenada que se lesionan unos a otros. 2) Las magdalenas que los manifestantes llevaban para agasajar a los polis se habían endurecido mucho y ya se sabe lo delicada que es la piel de los agentes. 3) Los estudiantes del Lluis Vives, cuya protesta es absolutamente legítima no están instruidos en guerrillas urbanas, ergo han sido manipulados y engañados."
¡Vaya! Me alegré mucho de que me hiciera esa pregunta. Hagamos un repaso a los hechos:
De acuerdo con la propia policía, los agentes heridos a lo largo de una semana de tensión en Valencia lo han sido por los siguientes motivos:
  • Mordedura quinto dedo mano derecha (Escoriación distal quinto dedo).
  • Esguince en tobillo derecho
  • Esguince acromioclavicular grado 1 y policontusiones.
  • Esguince cervical y policontusiones.
  • Erosión tercer dedo mano derecha.
  • Erosión tercer dedo mano derecha.
  • Contusión rodilla y contusión parrilla costal derecha.
  • Contusión mano izquierda.
  • Contusión pierna izquierda.
  • Contusión mano.
  • Policontusiones herida en dedo no complicada
  • Contusión tercio medio tibial anterior pierna derecha
...Y así hasta 21 partes médicos (Fuente: Parte médico de los 21 policías heridos en las algaradas de Valencia - ABC.es). No sé a vosotros, pero a mí me resulta "curioso" que no haya ni botellazos, ni quemaduras ni nada parecido. Sobre todo son esguinces y golpes en las manos (como los que te llevas cuando pegas un porrazo mal dado, sorprendentemente). Seguimos. Para no citar a medios de la Ultraizquierda sospechosos de parcialidad o amarillismo, me remito a la siguiente información aparecida en un medio centrado, serio, veraz y respetado por la gente de bien: El Mundo. Recomendable artículo. Hay que ver qué pena, ¿verdad? Los periodistas del citado medio se ponen en contacto con la Policía de Valencia para hacer un reportaje sobre los abnegados servidores públicos heridos en acto de servicio y resulta que (¡oh!) la persona que tiene "esa información" en ese momento no está. Ni en ese momento ni en todo el resto del día...

Ah no, pero... ¡Espera! ¡Resulta que el otro día los "radikales antisistema" agredieron a un equipo de reporteros de Intereconomía. ¡Intolerable! ¡¡INTOLERABLE!! 



¿Eh? ¿Cómo? ¿Que en realidad no?

Ah... Vaya...

Lo mejor del vídeo: los encapuchados antisistema invisibles que proferían gritos e insultos inaudibles. Y que propinaban patadas incorpóreas, cabría tal vez añadir...


Además, si eso hubiera sido así, si hubiera habido grupúsculos de violentos "antisistema" agrediendo a la gente y destrozando Valencia, ¿cómo es que precisamente durante los últimos días, justamente a partir de que el propio Rajoy haya tenido que salir en los medios desde Londres para pedir mesura, justamente a partir de que la policía haya desaparecido, justamente cuando se han llevado a cabo las mayores manifestaciones de toda la Primavera Valenciana, es cuando no ha pasado nada?

En fin, querido conocido. Lo que te vengo a decir es que hay una cuarta explicación posible a tu pregunta. La más sencilla:

4) Era mentira.



En este país, que ya no es España sino una parodia de sí mismo, tenemos policías condenados en firme por TORTURAS patrullando las calles como si nada, y no pasa ná. Y aún nos permitimos ir dando lecciones de democracia a venezolanos, griegos, ecuatorianos...

Pero volviendo a Valencia, vendría bien recordar lo que pasó el 27 de mayo en Barcelona, cuando la Generalitat decidió "limpiar" Plaça Catalunya a sangre y fuego, dejando casi 50 personas heridas (entre ellas, un mosso), para que al día siguiente otra previsible concentración no comunicada pudiese disfrutar de ese espacio (la celebración de la Champions, que ni siquiera se había celebrado aún. Pues bien, después de aquél esperpento internacional que fue el ver a policías vestidos en plan Robocop apaleando a personas sentadas y con las manos en alto, cuando puestas las denuncias un juez ha pedido al gobierno de la Generalitat que identificase a los agente que tomaron parte en aquello, resulta que Puig (Felip Puig Dimissió, Conseller de Interior) dice que... ¡No puede reconocer a los agentes porque no llevaban su identificación visible! Así que a otra cosa, mariposa. Y lo mismo pasará con las hostias que repartieron los nacionales para honrar la visita veraniega del Papa (de las que a mí me tocaron dos, por cierto), pues tampoco llevaban la identificación. Y bueno, ya que estoy aprovecho para comentarlo: uno de los días que no hubo carga (¿tal vez el único?) llamé al 112 para denunciar que había unos señores que decían ser policías pero que no llevaban placa ni identificación de ningún tipo. Me dijeron que eso no era una emergencia. Les dije que podría serlo en cuestión de segundos si se ponían a cargar. Y me dijeron que llamara a la policía nacional y me colgaron. Llamé al 091. Les dije que había unos señores que decían ser policías pero que no llevaban placa ni identificación de ningún tipo. Me dijeron que tomaban nota (con muy mala leche) y me colgaron. ¡OLÉ!

En fin, resumiendo: Todo esto me hace dudar MUCHO de que realmente se vaya a investigar nada, o vaya a rodar ninguna cabeza más allá de (en el mejor de los casos) la del pringado de turno.

----------

Adenda 1: Ya había terminado y publicado el artículo, pero aún así no me resisto a hacer un poco de demagogia barata:


Creo que sé de un agente que no va a ser sancionado hoy tampoco.