什么产生不一致的条件查找结果?


0

我正在编写一个小脚本,在任意目录中获取有关两个不同文件扩展名(* .parquet OR * .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扩展名结尾的文件,并计算两个扩展名的文件总数,每个扩展名的总文件大小,每个扩展名的平均文件大小,总和所有文件大小

查找统计数据很简单,只是列出了什么让我失望的文件。我究竟做错了什么?

Answers:


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

非常感谢!我知道这与此有关,-o但我不知道是什么!
ILikeTacos
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.