
Estou escrevendo um pequeno script que obtém diversas estatísticas de arquivos sobre duas extensões de arquivo diferentes (*.parquet OR *.metadata) em um diretório arbitrário. Preciso obter essas estatísticas de arquivos apenas de arquivos que foram modificados/criados nas últimas 24 horas
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
As saídas da primeira linha60540
A segunda linha produz430
As saídas da terceira linha430
A saída esperada é que a primeira linha seja a soma da segunda e terceira linhas (ou que a segunda e terceira linhas sejamfirstline / 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 ambas as extensões, tamanhos totais de arquivo para cada extensão, tamanho médio de arquivo para cada extensão, soma de todos os tamanhos de arquivo
Encontrar as estatísticas é fácil, basta listar os arquivos que estão me confundindo. O que estou fazendo de errado?
Responder1
É 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
, que assumem associações com precedência mais alta 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á encontrando 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 do diretório de pesquisa, modificados 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