假设我想创建变量,每个变量对应使用 df 时使用的大小、可用的变量。如何为每个变量创建变量?是否有一个选项只返回其中之一?
directorySize=
directoryUsed=
directoryAvailable=
假设我想根据主目录创建这些变量。我该怎么做?
答案1
没有选择只返回一个字段。但是,该选项-P
保证所有字段都打印在同一行上(如果没有此选项,如果第一列太宽,则其他字段将移至下一行)。然后,您可以使用 awk 从第二行打印所需的列。
size=$(df -Pk ~ | awk 'NR==2 {print $2}') # in kB
要一次设置所有变量,您可以让 awk 打印 shell 片段。
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))