¿Qué produce un resultado de búsqueda condicional inconsistente?

¿Qué produce un resultado de búsqueda condicional inconsistente?

Estoy escribiendo un pequeño script que obtiene una variedad de estadísticas de archivos sobre dos extensiones de archivos diferentes (*.parquet O *.metadata) en un directorio arbitrario. Necesito obtener estas estadísticas de archivos solo de archivos que fueron modificados/creados en las ú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

Las salidas de la primera línea60540

La segunda línea produce430

La tercera línea sale430

El resultado esperado es que la primera línea sea la suma de la segunda y tercera líneas (o que la segunda y tercera líneas seanfirstline / 2

Lo que intento hacer es enumerar todos los archivos que terminan con la extensión .parquet O .metadata y contar la cantidad total de archivos para ambas extensiones, el tamaño total de los archivos para cada extensión, el tamaño promedio de los archivos para cada extensión, la suma de todos los tamaños de archivos

Encontrar las estadísticas es fácil, lo que me desconcierta es simplemente enumerar los archivos. ¿Qué estoy haciendo mal?

Respuesta1

Es la precedencia del operador la que está causando su problema. Dado que todas las expresiones sin operaciones lógicas entre ellas están vinculadas implícitamente con -a, lo que tiene asociados con mayor prioridad que -o, su expresión combinada es equivalente a:

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

Esto significa que encontrará todos los archivos normales en el directorio de búsqueda que han sido modificados en las últimas 24 horas con el nombre *.parquet, además de todos los archivos/directorios/sockets, etc., ubicados en cualquier lugar del árbol del directorio de búsqueda, modificados en cualquier momento, y con el nombre *.metadata. Lo que necesitas es:

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

información relacionada