Obtener las extensiones de fichero existentes en un directorio

Una mini-receta rápida para obtener, de forma recursiva, todas las extensiones de fichero que existan a partir de un directorio dado:

find directorio_raiz -type f -exec sh -c 'basename $0 | sed "s/.*\.//"' {} \; | sort | uniq

El truco viene del archipoderoso sed, que permite obtener las extensión de un fichero mediante la orden sed “s/.*\.//”, y funciona que yo sepa, para cualquier Unix con una shell compatible con sh y find, basename y sed instalados.

3 Respuestas a “Obtener las extensiones de fichero existentes en un directorio”


  • Hola, soy yo, como siempre, jodiendo.

    Dos cosas: en el “mandato” tienes bien puesta la expresión regular, pero en el texto se te ha traspapelado una barra invertida por un pipe.

    Lo segundo es una pregunta (doble): ¿por qué le pasas al script the sh dos veces el nombre del archivo (haces {} {})? ¿no hay que escapar esos corchetes? Yo siempre ando escapándolos.

  • Jajaja mira que al principio le había puesto un for al find para aplicar el pipe y luego me dije… “espera, seguro que luego viene YoNoSoyTu a decirme que se puede hacer con find:P pero veo que ni aun así me libro :D .

    He mirado lo que dices (y de paso he borrado una comilla simple que sobraba y no encuentro el pipe que sobra… ¿no será algo de las tipografías, que al estar en cursiva se ve como un pipe? He probado a pegar ambas órdenes (¿éste mejor :D ?) en la terminal y funcionan bien :?:

    Sobre los corchetes… no hace falta escaparlos, al menos en bash (cuando usaba tcsh si que recuerdo que los tenía que escapar). Y no sé porqué le paso dos, bueno, si, porque soy poco hábil :D . Pensé que el $0 sería el mandato que le pasas al shell, pero es el primer parámetro. Editado, gracias :)

  • Pues tienes toda la razón, es una \ que por el arte de la cursiva se ha convertido en | (un poco borroso, ahora que lo miro de cerca). Ni se me había pasado pegarlo en otro campo de texto para ver el texto real. Siento la falsa alarma.

    Y sobre los corchetes, pues muchas gracias, me has ahorrado dos teclas al día.

Añade un Comentario