Считать имя и размер каталога в ассоциативный массив - PullRequest
0 голосов
/ 14 мая 2019

Я хочу получить имя и размер всех каталогов [на верхнем уровне] указанного каталога в ассоциативный массив, чтобы имя использовалось в качестве ключа, а размер - в качестве значения.

Я знаю, что могу использовать mapfile, чтобы прочитать выходные данные команды (это извлекает размер каталога) в индексированный массив:

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

(я бы затем прошел циклэтот массив и использовать его для заполнения ассоциативного массива.)

  1. Я знаю, что я мог бы создать соответствующий массив и заполнить его именем каталога (хотя нетспособ узнать, произошло ли изменение содержимого между командами), но как я могу извлечь размер и имя, изменив мой фрагмент кода?

  2. Есть ли способ пропуститьпромежуточный индексированный массив?

1 Ответ

0 голосов
/ 14 мая 2019

Если есть много предметов, быстрее, хотя и не красивее, чтобы избежать петли.Здесь я использую 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"*)
...