Contagem de arquivos em cada subdiretório

8

Gostaria que um comando BASH listasse apenas a contagem de arquivos em cada subdiretório de um diretório.

Por exemplo no diretório /tmp , há dir1 , dir2 , ... Gostaria de ver:

'dir1' : x files 
'dir2' : x files ...
    
por jldupont 14.09.2012 / 23:17

5 respostas

16

Supondo que você queira apenas uma contagem recursiva de arquivos, não de diretórios e outros tipos, algo como isto deve funcionar:

find . -maxdepth 1 -mindepth 1 -type d | while read dir; do
  printf "%-25.25s : " "$dir"
  find "$dir" -type f | wc -l
done
    
por 14.09.2012 / 23:32
11

Essa tarefa me fascinou tanto que eu mesmo queria descobrir uma solução. Ele nem leva um loop while e MAIO é mais rápido na velocidade de execução. É desnecessário dizer que os esforços de Thor me ajudaram muito a entender as coisas em detalhes.

Então aqui está o meu:

find . -maxdepth 1 -mindepth 1 -type d -exec sh -c 'echo "{} : $(find "{}" -type f | wc -l)" file\(s\)' \;

Parece modesto por um motivo, pois é muito mais poderoso do que parece. : -)

No entanto, se você pretende incluir isso em seu arquivo .bash_aliases , ele deve ficar assim:

alias somealias='find . -maxdepth 1 -mindepth 1 -type d -exec sh -c '\''echo "{} : $(find "{}" -type f | wc -l)" file\(s\)'\'' \;'

Observe a manipulação muito complicada de citações aninhadas simples . E não, é não possível usar aspas duplas para o argumento sh -c .

    
por 25.11.2014 / 15:02
1

Usar o find é definitivamente o caminho a percorrer se você quiser contar recursivamente, mas se quiser apenas uma contagem dos arquivos diretamente em um determinado diretório:

ls dir1 | wc -l

    
por 14.09.2012 / 23:35
0

O que eu uso ... Isso cria uma matriz de todos os subdiretórios no que você fornece como parâmetro. Imprima o subdiretório e a contagem desse mesmo subdiretório até que todos os subdiretórios sejam processados.

#!/bin/bash    
directories=($(/bin/ls -l $1 | /bin/grep "^d" | /usr/bin/awk -F" " '{print $9}'))

for item in ${directories[*]}
    do
        if [ -d "$1$item" ]; then
            echo "$1$item"
            /bin/ls $1$item | /usr/bin/wc -l
        fi
    done
    
por 13.10.2015 / 16:06
0

$ find. tipo f | cut -d "/" -f2 | uniq -c

Lista pastas e arquivos na pasta atual com uma contagem de arquivos encontrados abaixo. OMI rápido e útil. (arquivos mostram com contagem 1).

    
por 04.10.2018 / 12:13

Tags