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.
Parecidos razonables
-
El mandato screen
febrero 1, 2007
5 -
Homebrew for Mac Os X: cambiar entre distintas versiones de una instalación
abril 7, 2011
7 -
Bucles en la terminal
septiembre 22, 2006
13 -
Musepack MPC a MP3 en Ubuntu Linux
enero 15, 2008
2 -
Creando ficheros tipo JAR de Java en Unix (sólo clases)
octubre 31, 2007
3

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”
pero veo que ni aun así me libro
.
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
?) 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
. 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.
Gracias por el dato
el “sort | uniq” lo puedes poner como “sort -u” pero me fue mas util “sort | uniq -c” y me indica la cantidad de archivos por tipo
¡Gracias, no sabía lo del sort -u! Lo del uniq -c lo descubrí a posterori, muy util :).
HOla Deigote, gracias por la mini-receta que publicaste, ahora estoy tratando de obtener el formato de compresion de un archivo, es decir necesito saber si el archivo esta comprimido con .tar , .tar.gz, .rar, .zip, etc. Oja puedas ayudarme. Gracias Por su tiempo.
Si no te vale con la extensión, puedes adaptar la receta para usar el mandato file. No es infalible, pero suele acertar bastante :).