dfで使用可能および使用可能なサイズに対してのみ変数を生成するには?

dfで使用可能および使用可能なサイズに対してのみ変数を生成するには?

dfを使用するときは、サイズと利用可能な変数にそれぞれ対応する変数を作成したいとします。各変数の変数を作成するには?そのうちの1つだけを返すオプションはありますか?

directorySize=

directoryUsed=

directoryAvailable=

私のホームディレクトリに基づいてこれらの変数を作成したいとしましょう。どうすればいいですか?

答え1

どの選択も1つのフィールドだけを返しません。ただし、このオプションを使用すると、すべてのフィールドが-P同じ行に印刷されます(このオプションを使用しないと、最初の列が広すぎる場合は別のフィールドが次の行に移動されます)。その後、awkを使用して2行目の希望の列を印刷できます。

size=$(df -Pk ~ | awk 'NR==2 {print $2}')  # in kB

すべての変数を一度に設定するには、awkにシェルフラグメントを印刷させることができます。

eval "$(df -Pk ~ | awk 'NR==2 {printf "size=%d used=%d available=%d", $2, $3, $4}')"

一部の外国システムでは、ファイルシステムのラベルにスペースを入れることができるため、df出力を確実に解析することはできません。残念ながら、他の移植可能な方法はありません。

Linuxでのみこのstatコマンドを使用できます。ブロックを使用してサイズを表現するのは多少厄介です。

block_size=$(stat -f -c %S ~)
total_blocks=$(stat -f -c %b ~)
free_blocks=$(stat -f -c %f ~)
size=$((block_size * total_blocks)) # in bytes
available=$((block_size * free_blocks))
used=$((size - available))

関連情報