矛盾した条件付き検索結果を生成しているのは何ですか?

矛盾した条件付き検索結果を生成しているのは何ですか?

任意のディレクトリにある 2 つの異なるファイル拡張子 (*.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

2行目は出力430

3行目は出力430

期待される出力は、最初の行が2行目と3行目の合計(または2行目と3行目が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

関連情報