Решение этой проблемы найдено. Если вы удалите опцию munge links из rsyncd.conf, а затем измените chroot = yes, ваши символические ссылки будут перенесены без проблем.
Хотя это откроет возможную дыру в безопасности, где все может быть символически связано, и нет защиты, для защиты которой были разработаны ссылки манжа и chroot. Таким образом, использование этого решения зависит от конкретной среды
.Использование толькоjq
(дважды )и петли оболочки:
for pathname in /sys/bus/w1/devices/w1_bus_master1/28-*/; do
jq -n \
--arg ID "$(basename "$pathname")" \
--arg temp "$(cat "$pathname"/temperature)" \
'{ ID: $ID, temp: $temp }'
done |
jq -s '. | map(.temp = (.temp | tonumber / 1000) )'
Цикл повторяется по путям, соответствующим каталогам, начинающимся с 28-
, которые вы упомянули в вопросе. Цикл использует jq
для создания одного объекта JSON для каждого каталога, состоящего из элемента ID
и элемента temp
. Значение для ID
будет просто базовым именем пути к каталогу, а температура считывается из файла temperature
в каталоге.
Эти отдельные объекты JSON затем передаются второму процессу jq
, который создает их массив с помощью параметра -s
(--slurp
). Он также изменяет элемент temp
каждого объекта путем преобразования его из строки в число и деления на 1000 (об этом вы никогда ничего не говорили, так что я предполагаю ).
То же самое, но с использованием чуть более удобной jo
утилиты внутри цикла:
for pathname in /sys/bus/w1/devices/w1_bus_master1/28-*/; do
jo ID="$(basename "$pathname")" \
temp="$(cat "$pathname"/temperature)"
done |
jq -s '. | map(.temp /= 1000 )'
Утилита jo
дополнительно определяет, что temp
является числом, поэтому нам не нужно позже преобразовывать их из строк.
Оба этих цикла создадут «симпатичный -печатный» JSON, например
[
{
"ID": "28-00000cbece90",
"temp": 21.812
},
{
"ID": "28-00000cbece91",
"temp": 21.812
}
]
Добавьте опцию-c
(--compact-output
)к окончательному jq
, чтобы вместо этого получить компактный вывод, например
[{"ID":"28-00000cbece90","temp":21.812},{"ID":"28-00000cbece91","temp":21.812}]