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