Я пишу небольшой скрипт, который получает различную статистику о двух разных расширениях файлов (* .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 ответ1

3

Причиной вашей проблемы является приоритет оператора. Поскольку все выражения без логических операций между ними неявно связаны с -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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .