首页 > 解决方案 > 将目录名称和大小读入关联数组

问题描述

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

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

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

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

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

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

标签: arraysbashassociative-array

解决方案


如果有很多项目,它会更快,虽然不是更漂亮,以避免循环。这里我使用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"*)

推荐阅读