Como você obtém uma contagem de todas as extensões de arquivo em um disco rígido usando o terminal gnu + linux? [duplicado]

2

No Windows eu tenho um programa que pode contar todos os arquivos em um disco rígido e a saída mostra uma lista de extensões de arquivos e um número (que mostrava quantos arquivos na unidade eram, por exemplo, jpg).

Como faço isso em um terminal no gnu + linux?

    
por yoshiserry 25.08.2014 / 13:35

2 respostas

5

find /filesystem -xdev -type f -name '?*.*' -print0 | awk -F. -vRS='
find /filesystem -xdev -type f -name '?*.*' -print0 | awk -F. -vRS='%pre%' '
   {c[$NF]++}; END{for (i in c) print c[i],i}' | sort -rn | less
' ' {c[$NF]++}; END{for (i in c) print c[i],i}' | sort -rn | less

Onde /filesytem é o ponto de montagem do sistema de arquivos que você deseja analisar.

    
por 25.08.2014 / 13:50
2

A filosofia unix é fornecer os blocos de construção e permitir que você monte esses blocos de construção para executar tarefas especializadas como esta.

O comando find atravessa uma árvore de diretórios e lista arquivos correspondentes a determinados critérios ou atua sobre eles. Por exemplo, find -xdev / percorre todos os arquivos no sistema de arquivos raiz e exibe seu nome. A opção -xdev omite arquivos em outros sistemas de arquivos, como montagens de rede, sistemas de arquivos especiais que fornecem informações do sistema, etc.

Para escolher o que é impresso, o GNU encontra oferece o -printf action . A %f diretiva imprime nomes de arquivos sem uma parte do diretório.

Os nomes de arquivos do Linux podem conter qualquer byte, exceto barras (que são separadores de diretórios) e bytes nulos. Se você estiver disposto a assumir que seus nomes de arquivo não contêm caracteres de nova linha, o processamento de nomes de arquivos será mais simples. Por segurança, você pode excluir nomes de arquivos que contenham uma nova linha.

find / -xdev ! -name $'*\n*' -printf '%f\n'

Para selecionar arquivos que tenham uma extensão, combinaremos um nome que contenha um ponto que não seja o primeiro caractere e apenas arquivos regulares (você pode ou não querer incluir links simbólicos também).

find / -xdev -name '?*.*' ! -name $'*\n*' -type f -printf '%f\n'

Chega com find . Para trabalhar nas extensões, usaremos ferramentas de processamento de texto, usando um pipeline de shell para combiná-las. Primeiro sed para fazer um pouco de reescrita para eliminar a parte do nome do arquivo que não é a extensão:

find / -xdev -name '?*.*' ! -name $'*\n*' -type f -printf '%f\n' |
  sed 's/.*\.//'

E, finalmente, para contar o número de ocorrências de cada extensão, nós classificamos a saída e contam duplicatas , e finalmente classificam o resultado por número de ocorrências.

find / -xdev -name '?*.*' ! -name $'*\n*' -type f -printf '%f\n' |
  sed 's/.*\.//' | sort | uniq -c | sort -n
    
por 26.08.2014 / 04:02

Tags