我想将指定目录的所有目录的名称和大小(在顶层)放入关联数组中,以便将名称用作键,将大小用作值。
我知道我可以使用mapfile
来将命令的输出(提取目录大小)读取到索引数组中:
mapfile -t inter_arry < <( du -d0 "$completePath"* | sed -E 's/^([0-9]*).*$/\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"*)