標準入力のサイズを取得するには?

標準入力のサイズを取得するには?

大きなディレクトリを圧縮しようとしていますが、結果ファイルのサイズがどれだけ正確になるかを知りたいです。

私は以下を試しましたdu

$ tar -cv dir | du -h -
du: cannot access '-': No such file or directory

それから「-」を使ってファイルバージョンを試しました。

$ tar -cv dir | du -h /dev/stdin
1.0K

この数字は正確ではないと確信しています。標準入力のサイズを取得するには?

ベストアンサー1

長すぎます。:tar -cv dir | wc -c - | cut -d' ' -f 1 | awk '{print $1/1000"K"}'

duファイル自体のサイズは実際には計算されません。すでにファイルサイズを追跡しているファイルシステムに問い合わせるようにカーネルに要求します。だからこそ早すぎます。したがって、ファイルの代わりにストリームを計算するという事実はdu機能しません。私の考えでは、これは1.0Kカーネルにハードコードされたサイズのようです。/dev/std*

解決策は、wc -cカーネルを照会するのではなく、バイト自体を計算することを使用することです。

$ tar -cv dir | wc -c

次のような出力が必要な場合du -h

$ tar -cv dir | wc -c | awk '{print $1/1000"K"}'

awk数字を人が読める結果に変換します。

おすすめ記事