O que está produzindo um resultado de busca condicional inconsistente?

0

Estou escrevendo um pequeno script que recebe estatísticas variadas de arquivos sobre duas extensões de arquivo diferentes (* .parquet OR * .metadata) em um diretório arbitrário. Eu preciso obter essas estatísticas de arquivos apenas de arquivos que foram modificados / criados dentro das últimas 24h

TD=${1:-'pwd'}
find $TD -maxdepth 1 -type f -mtime -1 -name "*.parquet" -o -name "*.metadata" | wc -l
find $TD -maxdepth 1 -type f -mtime -1 -name "*.parquet" | wc -l
find $TD -maxdepth 1 -type f -mtime -1 -name "*.metadata" | wc -l

A primeira linha gera 60540

A segunda linha gera 430

A terceira linha gera 430

A saída esperada é que a primeira linha seja a soma da segunda e terceira linhas (ou a segunda e terceira linhas sejam firstline / 2

O que estou tentando fazer é listar todos os arquivos que terminam com a extensão .parquet OR .metadata e contar a quantidade total de arquivos para as duas extensões, o tamanho total dos arquivos para cada extensão e o tamanho médio de cada extensão. soma de todos os tamanhos de arquivo

Encontrar as estatísticas é fácil, é apenas listar os arquivos que estão me jogando fora. O que estou fazendo errado?

    
por ILikeTacos 16.04.2018 / 23:48

1 resposta

3

É a precedência do operador que está causando o seu problema. Como todas as expressões sem operações lógicas entre estão implicitamente vinculadas a -a , o que leva os associados a uma precedência maior que -o , sua expressão combinada é equivalente a:

find $TD \( -maxdepth 1 -a -type f -a -mtime -1 -a -name "*.parquet" \) -o -name "*.metadata" | wc -l

Isso significa que você está localizando todos os arquivos normais no diretório de pesquisa que foram modificados nas últimas 24 horas com o nome *.parquet , além de todos os arquivos / diretórios / sockets, etc, localizados em qualquer lugar na árvore de diretórios de pesquisa. modificado a qualquer momento e com o nome *.metadata . O que você precisa é:

find $TD -maxdepth 1 -type f -mtime -1 \( -name "*.parquet" -o -name "*.metadata" \) | wc -l
    
por 17.04.2018 / 00:23

Tags