【问题标题】:Read directory name and size into associative array将目录名称和大小读入关联数组
【发布时间】:2019-05-14 12:10:56
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

    标签: arrays bash associative-array


    【解决方案1】:

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

    【讨论】:

    • 谢谢。要处理的项目相对较少,因此循环解决方案为我提供了我需要的内容,并且不需要中间索引数组。
    猜你喜欢
    • 2020-05-16
    • 1970-01-01
    • 1970-01-01
    • 2013-02-23
    • 2013-08-13
    • 2014-10-04
    • 1970-01-01
    • 1970-01-01
    • 2022-11-17
    相关资源
    最近更新 更多