2011-02-14 12 views

Respuesta

38

¿Qué tal esto:

find . -type f -name '*.*' | sed 's|.*\.||' | sort -u 
0

si está utilizando Bash 4+

shopt -s globstar 
for file in **/*.* 
do 
    echo "${file##*.} 
done 

Rubí (1.9+)

ruby -e 'Dir["**/*.*"].each{|x|puts x.split(".")[-1]}' | sort -u 
0

Sin embargo, otra solución utilizando hallazgo (que incluso debe ordenar las extensiones de archivo con nuevas líneas incrustadas correctamente):

# [^.]: exclude dotfiles 
find . -type f -name "[^.]*.*" -exec bash -c ' 
    printf "%s\000" "${@##*.}" 
' argv0 '{}' + | 
sort -uz | 
tr '\0' '\n' 
1
find . -type f | sed 's|.*\.||' | sort -u 

También funciona en mac.

0

BOOOOM otra:

find * | awk -F . {'print $2'} | sort -u 
+0

'echo 'gniourf.tar.gz' | awk -F. {'print $ 2'} 'da' tar' y 'echo 'one.two.three.pdf' | awk -F. {'print $ 2'} 'da' two'. ¿Estás seguro de que tu enfoque es el bueno? –

+0

Creo que la solución anterior es una solución simple, aquí puse otro hallazgo. -type f -name "*. *" | awk -F. '! a [$ NF] ++ {print $ NF}'. No creo que con comandos simples no puedas obtener todo tipo de archivo. Como dijo antes, hay algunos problemas al analizar cada fila, por lo que en este caso, estoy seguro de que es mejor usar algunos scripts en python, perl o similares en los que no tendrá este problema. De todos modos, puse una solución simple, si ahora la extensión de los archivos puede filtrar con un grep como | grep 'txt \ | png \ | pdf'. Gracias – ackuser

0
ls -1 | sed 's/.*\.//' | sort -u 

Actualización: Tiene razón Mateo. Basado en su comentario, aquí es una versión actualizada:

ls -R1 | egrep -C 0 "[^\.]+\.[^\./:]+$" | sed 's/.*\.//' | sort -u

+1

Esto tiene dos problemas. Primero, solo funciona para un directorio plano, pero omite subdirectorios. En segundo lugar, incluye todos los archivos sin extensiones en la salida. – Matthew

+0

[No analizar la salida de 'ls'] (http://mywiki.wooledge.org/ParsingLs), especialmente cuando es inútil. –

0

Yo sólo estaba tratando rápidamente esto como yo estaba buscando en Google para una buena respuesta. Estoy más Regex inclinado que Bash, pero esto también funciona para subdirectorios. Yo no creo que incluye archivos sin extensiones, ya sea:

ls -R | egrep '(\.\w+)$' -o | sort | uniq -c | sort -r

+0

[No analizar el resultado de 'ls'] (http://mywiki.wooledge.org/ParsingLs), especialmente cuando es inútil. –

Cuestiones relacionadas