首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将bash `ls`输出转换为json数组

将bash `ls`输出转换为json数组
EN

Stack Overflow用户
提问于 2012-04-20 02:19:51
回答 10查看 30.6K关注 0票数 25

可以使用bash脚本将ls的输出格式化为json数组吗?要使json有效,目录和文件的所有名称都需要用双引号括起来,用逗号分隔,整个内容需要用方括号括起来。例如,转换:

代码语言:javascript
复制
jeroen@jeroen-ubuntu:~/Desktop$ ls
foo.txt bar baz

代码语言:javascript
复制
[ "foo.txt", "bar", "baz" ]

编辑:我强烈喜欢在我所有的Linux服务器上都能工作的东西;因此,我不想依赖python,而是有一个纯bash解决方案。

EN

回答 10

Stack Overflow用户

回答已采纳

发布于 2012-04-20 03:23:02

使用perl作为编码器;它被保证是无buggy的,无处不在,而且有了管道,它仍然相当干净:

代码语言:javascript
复制
ls | perl -e 'use JSON; @in=grep(s/\n$//, <>); print encode_json(\@in)."\n";'
票数 13
EN

Stack Overflow用户

发布于 2012-04-20 02:28:21

是的,但是转角的情况和Unicode的处理会把你逼上绝路。最好委托一种本机支持它的脚本语言。

代码语言:javascript
复制
$ ls
あ  a  "a"  à  a b  私
$ python -c 'import os, json; print json.dumps(os.listdir("."))'
["\u00e0", "\"a\"", "\u79c1", "a b", "\u3042", "a"]
票数 27
EN

Stack Overflow用户

发布于 2012-04-20 02:38:50

您好,您可以使用sed和awk做到这一点:

代码语言:javascript
复制
ls | awk ' BEGIN { ORS = ""; print "["; } { print "\/\@"$0"\/\@"; } END { print "]"; }' | sed "s^\"^\\\\\"^g;s^\/\@\/\@^\", \"^g;s^\/\@^\"^g"

编辑:已更新以解决"和空格的问题。我使用/@作为"的替换模式,因为/不是文件名的有效字符。

票数 15
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10234327

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档