读取原始输入行并输出单个数组
read raw input lines and output single array
我有一个包含文件的目录。我想从该文件列表创建一个数组。我认为这会很简单,例如:
ls mydir | jq -R '[.]'
[
"file1"
]
[
"file2"
]
[
"file3"
]
我唯一能想到的是:
ls mydir | jq -sR '[split("\n")[]|select(.|length>0)]'
[
"file1",
"file2",
"file3"
]
有没有更好的方法?
一般情况下,您在处理 Unix 文件名时必须格外小心。它们几乎可以包含文件名中的任何字符,包括空格、换行符、逗号、竖线符号,以及除 NUL 之外的几乎所有您曾尝试用作定界符的其他字符。最好的办法是用 NUL 字符分隔名称,这是唯一不能成为有效文件名一部分的字符,并用 jq
拆分它
使用原生 shell printf
分隔 [=14=]
上的条目并将其分隔回来
printf '%s[=10=]' * | jq -Rn 'inputs | split("\u0000")'
或仅针对文件
for file in *; do
[ -f "$file" ] && printf '%s[=11=]' "$file"
done | jq -Rn 'inputs | split("\u0000")'
使用 find
开辟了其他可能性:
find . -type f -maxdepth 1 -print0 |
jq -Rs 'split("\u0000") | map(sub("./";""))'
我有一个包含文件的目录。我想从该文件列表创建一个数组。我认为这会很简单,例如:
ls mydir | jq -R '[.]'
[
"file1"
]
[
"file2"
]
[
"file3"
]
我唯一能想到的是:
ls mydir | jq -sR '[split("\n")[]|select(.|length>0)]'
[
"file1",
"file2",
"file3"
]
有没有更好的方法?
一般情况下,您在处理 Unix 文件名时必须格外小心。它们几乎可以包含文件名中的任何字符,包括空格、换行符、逗号、竖线符号,以及除 NUL 之外的几乎所有您曾尝试用作定界符的其他字符。最好的办法是用 NUL 字符分隔名称,这是唯一不能成为有效文件名一部分的字符,并用 jq
使用原生 shell printf
分隔 [=14=]
上的条目并将其分隔回来
printf '%s[=10=]' * | jq -Rn 'inputs | split("\u0000")'
或仅针对文件
for file in *; do
[ -f "$file" ] && printf '%s[=11=]' "$file"
done | jq -Rn 'inputs | split("\u0000")'
使用 find
开辟了其他可能性:
find . -type f -maxdepth 1 -print0 |
jq -Rs 'split("\u0000") | map(sub("./";""))'