Что приводит к непоследовательному результату условного поиска?

Что приводит к непоследовательному результату условного поиска?

Я пишу небольшой скрипт, который получает разную статистику файлов о двух разных расширениях файлов (*.parquet ИЛИ *.metadata) в произвольном каталоге. Мне нужно получить эту статистику файлов только из файлов, которые были изменены/созданы в течение последних 24 часов

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

Первая строка выводит60540

Вторая строка выводит430

Третья строка выводит430

Ожидаемый результат: первая строка должна быть суммой второй и третьей строк (или вторая и третья строки должны быть суммойfirstline / 2

Я пытаюсь составить список всех файлов, которые заканчиваются на расширение .parquet ИЛИ .metadata, и подсчитать общее количество файлов для обоих расширений, общие размеры файлов для каждого расширения, средний размер файла для каждого расширения, сумму всех размеров файлов.

Найти статистику легко, меня сбивает с толку просто перечисление файлов. Что я делаю не так?

решение1

Приоритет оператора является причиной вашей проблемы. Поскольку все выражения без логических операций между неявно связаны с -a, который принимает ассоциации с более высоким приоритетом, чем -o, ваше объединенное выражение эквивалентно:

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

Это означает, что вы находите все обычные файлы в каталоге поиска, которые были изменены за последние 24 часа с именем *.parquet, а также все файлы/каталоги/сокеты и т. д., расположенные в любом месте дерева каталога поиска, измененные в любое время и с именем *.metadata. Вам нужно:

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

Связанный контент