将目录名称和大小读入关联数组

时间:2019-05-14 12:10:56

标签: arrays bash associative-array

我想将指定目录的所有目录的名称和大小(在顶层)放入关联数组中,以便将名称用作键,将大小用作值。

我知道我可以使用mapfile来将命令的输出(提取目录大小)读取到索引数组中:

mapfile -t inter_arry < <( du -d0 "$completePath"* | sed -E 's/^([0-9]*).*$/\1/' );

(然后,我将遍历此数组,并使用它来填充关联数组。)

  1. 我知道我可以创建一个匹配的数组,并用目录名称填充它(尽管无法知道命令之间的内容是否发生了变化),但是如何修改代码段可以提取大小和名称吗?

  2. 是否可以跳过中间索引数组?

1 个答案:

答案 0 :(得分:0)

如果有很多项目,则可以更快地(尽管不漂亮)避免循环。在这里,我使用du | awk创建数组初始化字符串:

declare -A ARR=$(
  echo '( '$(
    du -d0 "$completePath"* |
      awk -F$'\t' '{printf "["$2"]="$1" "}'
  )')'
)

如果项目很少(例如,数千个或更少),请按照@Inian的建议使用循环:

declare -A ARR

while IFS=$'\t' read size name; do
    ARR[$name]=$size
done < <(du -d0 "$completePath"*)