json - 读取原始输入行并输出单个数组
问题描述
我有一个目录,里面有文件。我想从该文件列表中创建一个数组。我认为这很容易,例如:
ls mydir | jq -R '[.]'
[
"file1"
]
[
"file2"
]
[
"file3"
]
我唯一能弄清楚的是:
ls mydir | jq -sR '[split("\n")[]|select(.|length>0)]'
[
"file1",
"file2",
"file3"
]
有没有更好的办法?
解决方案
一般来说,在处理 Unix 文件名时,您必须格外小心。它们几乎可以包含文件名中的任何字符,包括空格、换行符、逗号、管道符号,以及除 NUL 之外您曾经尝试用作分隔符的几乎任何其他内容。最好的办法是用 NUL 字符分隔名称,这是唯一不能成为有效文件名一部分的字符,并用jq
使用本机 shellprintf
分隔条目\0
并将其分隔回来
printf '%s\0' * | jq -Rn 'inputs | split("\u0000")'
或仅用于文件
for file in *; do
[ -f "$file" ] && printf '%s\0' "$file"
done | jq -Rn 'inputs | split("\u0000")'
推荐阅读
- python - Jupyterlab、pandas、xlsxwriter:未创建文件
- macos - 如何在 SwiftUI for macOS 中创建首选项样式工具栏?
- c# - 在 Dotnetcore3.1 中执行存储过程
- netlogo - 如何在 Netlogo 中链接不同代理集的海龟
- javascript - Adobe Acrobat 在新的 doc.txt 中插入文本
- pip - 在 pip3 requirements.txt 中指定 -f 选项
- java-8 - 从对象列表中获取最后一个非空对象
- r - 如何将数字矩阵转换为 R 中的张量流数据集?
- github - GitHub 代码永久链接不粘贴行
- vba - 释放 PST 文件的文件锁定