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

Read directory name and size into associative array

我想将指定目录的所有目录的名称和大小[在顶层]获取到一个关联数组中,以名称为键,大小为值。

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

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

(然后我会遍历这个数组并用它来填充关联数组。)

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

  2. 有没有办法跳过中间的索引数组?

如果项目很多,速度会更快,但不会更漂亮,以避免循环。这里我使用du | awk创建数组初始化字符串:

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

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

declare -A ARR

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