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