是什麼產生了不一致的條件查找結果?

是什麼產生了不一致的條件查找結果?

我正在編寫一個小腳本,用於獲取任意目錄中有關兩個不同檔案副檔名(*.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

相關內容