什么原因导致了不一致的条件查找结果?

什么原因导致了不一致的条件查找结果?

我正在编写一个小脚本,用于获取任意目录中两种不同文件扩展名(*.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

相关内容