Encontre a extensão correspondente do arquivo e, em seguida, conte os arquivos no diretório encontrado

1

Estou tentando pesquisar no sistema de arquivos todos os arquivos que correspondem a uma extensão ( *.what ) e, em seguida, contabilizo todos os arquivos no diretório em que ele encontrou os arquivos *.what . A saída deve conter o nome do diretório e nomes de arquivos com contagem.

Como isso pode ser feito?

    
por Cyw 26.11.2012 / 18:21

4 respostas

4

Primeiro, você usaria o comando find no terminal.

find . -type f -name "*.what"

Isso listará todos os arquivos no sistema a partir do diretório atual "." correspondência "tipo: arquivo" e nome "* .que".

Então você pode incorporar isso em um script bash, assim:

Editar

Aqui você vai, isso faz o que você quer, eu acho.

#!/bin/bash

src=${1:-"."}
ext=${2:-"what"}

for dir in 'find ${src} -type f -name "*.${ext}"'; do
    dir='echo ${dir} | awk 'BEGIN{FS=OFS="/"}{$NF=""}{print}''
    echo ${dir} "has" 'ls -l ${dir} | awk '!NR=1 && !/^d/ && !/*.what/ {print $NF}' | wc -l' "file(s)"
done

Isso gerará o número de arquivos em qualquer diretório que contenha * .what (recursivamente). O número se os arquivos excluírem os diretórios !/^d/ e o arquivo * .what !/*.what/ .

Isso deve levar você até lá. Funciona no meu sistema, pelo menos, supondo que eu entendi a pergunta.

    
por 26.11.2012 / 18:28
1

Experimente este pipeline:

find -name '*.what' -exec dirname {} \; | sort | uniq -c
    
por 26.11.2012 / 18:37
0
$ cat tmp/example.awk
{
   a[$1]++
} END {
   for (i in a) {
     dir=i; gsub(" ", "\ ", dir) ;
     printf "echo %s: %d; cd %s; ls -1 *htm; cd ->/dev/null; echo\n", \
        i, a[i], dir, dir
   }
}

Exemplo de saída:

find . -iname "*.htm" -printf "%h\t%f\n" |sort |\
    awk -F'\t' -f tmp/example.awk |sh
(...)
./fpsu/applikasjon/kjerne/lib: 1
xom-1.0b5.htm

./tmp/refcp/refcp/home/jaroslav/reference/programing/input-processing: 1
Capitalizing+personal+names.htm

./Downloads/index files: 3
allclasses-frame.htm
overview-frame.htm
overview-summary.htm

./tmp/refcp/refcp/home/jaroslav/reference/code/html-css/common-web-fonts_files: 6
hostedbadge_002.htm
hostedbadge_003.htm
hostedbadge.htm
like_002.htm
like_003.htm
like.htm
(...)

O primeiro passo é imprimir cada pasta e nome de arquivo com uma determinada extensão. Isso é feito com os argumentos% h% t para encontrar o printf.

O próximo passo é contar cada entrada em uma determinada pasta com um [$ 1] ++ no programa awk. Ou seja, para cada linha impressa, incrementamos uma entrada de array com o índice igual ao nome do diretório encontrado contendo arquivos com o sufixo fornecido.

Quando todas as entradas foram contadas, fazemos eco a um simples comando shell para imprimir os resultados e listar os arquivos em todos os diretórios que encontramos.

O resultado é uma lista de comandos do shell que enviamos para sh .

    
por 26.11.2012 / 23:19
-1
find -name *.c|grep -c .c

isto irá encontrar o número de itens com extensão .c

find -name *.c 

listará a estrutura de diretórios dos itens com extensão .c

!/bin/bash

find -name *$1|grep -c $1
find -name *$1

salve isso como list.sh em / home / yourname / bin

Chmod +x list.sh
chown {username} list.sh

chame-o em qualquer lugar por lista * .extension

Exemplo list *.c

    
por 26.11.2012 / 18:41

Tags