我有一个目录,其中包含文件。我想从该文件列表创建一个数组。我以为这会很容易,比如:
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")'
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)