salva o número de arquivos apenas em uma pasta específica

3

Estou usando este script para salvar o número de arquivos em uma pasta principal, mas também conta as subpastas dentro dessa pasta principal. nfiles=$(ls -1 /home/userA/mainfolder | wc -l) Algum conselho de como posso modificá-lo para incluir apenas arquivos e não pastas?

    
por Tak 16.03.2015 / 03:30

2 respostas

2

Em vez de analisar ls , você pode usar find :

find . -maxdepth 1 -type f ! -name ".*" | wc -l

Isso localizará todos os arquivos ( -type f ) no diretório atual ( . ), exceto aqueles que começam com a. ( ! -name ".*" ) e passa o resultado para wc para contar as linhas.

Para usá-lo como uma variável no seu script:

nfiles=$(find . -maxdepth 1 -type f ! -name ".*" | wc -l)
    
por 16.03.2015 / 04:34
3

Não use find para isso.

Além de requerer extensões GNU não-portáteis para fazê-lo funcionar, ele também tem que stat() de cada arquivo para o qual procura. ls , por outro lado, pode simplesmente listar as dentries do diretório atual em -1 por linha, enquanto -q uotando todas as não-imprimíveis com um? ponto de interrogação (para incluir \n ewlines) e anexando um / para cada listagem de diretórios.

Dessa forma, para um simples -c de não-dotfiles no diretório atual, você pode simplesmente fazer:

ls -1pq | grep -c -v /

E todo o processo não só é provavelmente mais rápido do que find , como também é feito POSIXAMENTE.

    
por 16.03.2015 / 05:26