Foros del Web » Administración de Sistemas » Unix / Linux »

Sentencia en bash conocer sufijos de los archivos

Estas en el tema de Sentencia en bash conocer sufijos de los archivos en el foro de Unix / Linux en Foros del Web. Holas, Estoy intentando hacer un comando en bash para poder conocer los sufijos distintos de los nombres de los archivos (podría decir extensiones, pero en ...
  #1 (permalink)  
Antiguo 01/09/2009, 12:44
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 8 meses
Puntos: 20
Sentencia en bash conocer sufijos de los archivos

Holas,

Estoy intentando hacer un comando en bash para poder conocer los sufijos distintos de los nombres de los archivos (podría decir extensiones, pero en linux no hay xDD)

Un ejemplo vale mas que mil palabras:

Tenemos una carpeta y dentro de esta encontramos los siguientes archivos

aa.txt
bb.txt
cc.php
ee.cgi
ff.php
...

La orden debería decirte que hay 3 tipos de archivos diferente (TXT, PHP y CGI). No los nombres, simplemente mostrarte los 3 sufijos.

Hasta donde he llegado ha sido a lo siguiente :

find . -name '*.php'

Con esto busco los archivos que acaban con una determinada extensión

Pero creo que utilizando algún tipo de expresión regular podríamos sacar lo que queremos... sería algo así: Encuentrame todo lo que acabe por ".XXX" donde XXX son cualquier carácter, de este modo listaríamos todos los archivos con sufijos... el problema sería discriminar las extensiones repetidas. Se me ocurre utilizar el comando uniq pero al tener nombres diferentes los archivos me sacará todo no? para ello tendriamos que cortar los últimos 3 carácteres y ejecutar uniq sobre ellos...

Acepto sugerencias :D
  #2 (permalink)  
Antiguo 02/09/2009, 08:35
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Sentencia en bash conocer sufijos de los archivos

Más que los últimos 3 caracteres, deberías obtener el trozo de nombre que está desde el último punto (ya que un archivo puede llamarse a.b.txt) hasta el final.

Una primera forma que se me ocurre es combinar:
* ls -1
un archivo por línea, solamente el nombre

* grep -oE "([^.]+)$"
-o para que imprima solamente la parte de la línea que coincide con el patrón, -E para que acepte expresiones regulares extendidas, y el patrón dice "secuencia de caracteres diferentes a . que están al final de la línea"

* sort | uniq
mostrar ordenados y sin repetidos

Tonces,

Código:
ls -1 | grep -oE "([^.]+)$" | sort | uniq

Saludos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:09.