Listar todas as extensões exclusivas para arquivos contidos em um diretório

10

Eu gostaria de ver toda a extensão exclusiva de arquivos contidos em um determinado diretório. Qual é o comando para fazer isso no bash?

Pode-se usar find . -type f para obter todos os arquivos no diretório atual, depois remover a extensão e canalizá-la para uniq . Qual é a maneira mais fácil de despir a extensão?

    
por dzhelil 11.01.2011 / 10:42

5 respostas

14

Tente isto:

find . -type f | sed -rn 's|.*/[^/]+\.([^/.]+)$||p' | sort -u

Não produz nada para:

  • Arquivos sem extensão
  • Arquivos com nomes que terminam em um ponto
  • Arquivos ocultos

Também pode ser útil canalizá-lo para sort | uniq -c .

    
por 12.01.2011 / 04:22
3

Uma forma rápida e fácil de memorizar a extensão é fazer com que todos os nomes de arquivos tenham o formato "name.ext" e depois usar:

 ls -1 | cut -d"." -f2- | sort | uniq -c

isso fornece uma contagem de quantas extensões exclusivas existem, por exemplo:

   1 sh  
   3 txt  
   4 txt.Z  
  17 dat  
  72 dat.gz  
    
por 28.01.2016 / 15:56
3

Aqui está outra solução que não se confunde com nomes de arquivos que contêm novas linhas incorporadas e usa sort -uz para ordenar corretamente extensões de arquivos que também podem ter novas linhas incorporadas:

# [^.]: exclude dotfiles
find . -type f -name "[^.]*.*" -exec bash -c '
   printf "%s
# [^.]: exclude dotfiles
find . -type f -name "[^.]*.*" -exec bash -c '
   printf "%s%pre%0" "${@##*.}" # get the extensions and nul-terminate each of them
' argv0 '{}' + |
sort -uz | 
tr '%pre%' '\n' | 
nl
0" "${@##*.}" # get the extensions and nul-terminate each of them ' argv0 '{}' + | sort -uz | tr '%pre%' '\n' | nl
    
por 18.05.2011 / 09:58
2
find . -type f | sed -E 's/.+[\./]([^/\.]+)//' | sort -u

Funciona no OS X, exceto arquivos sem extensão. Minha pasta de downloads:

DS_Store
dmg
exe
localized
msi
nib
plist
pmproj
rar
tgz
txt
webloc
zip

Você pode precisar de sed -r ?

Problema secundário: os arquivos sem extensões imprimem seu nome. Arquivos ocultos (como .DS_Store ) imprimem seu nome sem gerar . .

    
por 11.01.2011 / 10:48
1

veja, é por isso que eu gosto do awk:

find . -type f | awk -F "." '{ print $(NF) }' | sort -u
    
por 29.03.2015 / 22:00

Tags