find -exec duの要約が異なるのはなぜですか?

find -exec duの要約が異なるのはなぜですか?

/media/data/Selbstgemachtフォルダに家族の写真と映画があり、すべての写真のサイズを知りたいです。 /media/dataで私はfind Selbstgemacht -type f -iname '*.jpg' -exec du -ch '{}' +それを使用して5,1GBを返します。
ところで、「Selbstgemacht」フォルダに入って使用すると、find . -type f -iname '*.jpg' -exec du -ch '{}' +7.0GBが出ます。

次に、findの出力を比較して、同じファイルが見つかったことを確認します。親
フォルダからサブフォルダfind Selbstgemacht -type f -iname '*.jpg' -printf '%P\n' |sort > test1.txt
find . -type f -iname '*.jpg' -printf '%P\n' |sort > ../test2.txt

ファイルは同じなので、両方の find コマンドはまったく同じファイルを探します。したがって、duが報告したサイズの違いは、他の原因によるものと考えられます。

ここで理由は何ですか?

システムメッセージ:

  • Debian 安定版
  • 検索(GNU findutils)4.4.2
    • D_TYPE O_NOFOLLOW(有効化)
    • LEAF_OPTIMISATION、FTS()、CBO(レベル= 0)
  • du(GNU coreutils) 8.13

ベストアンサー1

find ... -exec cmd {} +cmdコマンドに渡される引数のサイズ制限に違反しないように、必要な回数だけ実行されます。

使用時find . -exec du {} +のファイルリストのサイズが使用時よりも小さくなりますfind verylongdirname -exec du {} +

したがって、このコマンドよりも多くのコマンドfind verylongdirnameが実行される可能性が高くなります。最後に表示される合計は、すべてのファイルを除く最後の実行の合計です(より多くのものです)。dufind .du以前は確認のためにコマンドをパイプできましたgrep 'total$'

おすすめ記事