将目录名称和大小读入关联数组
Read directory name and size into associative array
我想将指定目录的所有目录的名称和大小[在顶层]获取到一个关联数组中,以名称为键,大小为值。
我知道我可以使用 mapfile
将命令的输出(提取目录大小)读入索引数组:
mapfile -t inter_arry < <( du -d0 "$completePath"* | sed -E 's/^([0-9]*).*$//' );
(然后我会遍历这个数组并用它来填充关联数组。)
我知道我 可以 创建一个匹配数组并用目录名填充它(尽管无法知道命令之间的内容),但是如何通过修改我的代码片段来提取大小和名称?
有没有办法跳过中间的索引数组?
如果项目很多,速度会更快,但不会更漂亮,以避免循环。这里我使用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"*)
我想将指定目录的所有目录的名称和大小[在顶层]获取到一个关联数组中,以名称为键,大小为值。
我知道我可以使用 mapfile
将命令的输出(提取目录大小)读入索引数组:
mapfile -t inter_arry < <( du -d0 "$completePath"* | sed -E 's/^([0-9]*).*$//' );
(然后我会遍历这个数组并用它来填充关联数组。)
我知道我 可以 创建一个匹配数组并用目录名填充它(尽管无法知道命令之间的内容),但是如何通过修改我的代码片段来提取大小和名称?
有没有办法跳过中间的索引数组?
如果项目很多,速度会更快,但不会更漂亮,以避免循环。这里我使用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"*)