可以使用bash脚本将ls
的输出格式化为json数组吗?要使json有效,目录和文件的所有名称都需要用双引号括起来,用逗号分隔,整个内容需要用方括号括起来。例如,转换:
jeroen@jeroen-ubuntu:~/Desktop$ ls
foo.txt bar baz
至
[ "foo.txt", "bar", "baz" ]
编辑:我强烈喜欢在我所有的Linux服务器上都能工作的东西;因此,我不想依赖python,而是有一个纯bash解决方案。
发布于 2012-04-19 19:23:02
使用perl作为编码器;它被保证是无buggy的,无处不在,而且有了管道,它仍然相当干净:
ls | perl -e 'use JSON; @in=grep(s/\n$//, <>); print encode_json(\@in)."\n";'
发布于 2012-04-19 18:28:21
是的,但是转角的情况和Unicode的处理会把你逼上绝路。最好委托一种本机支持它的脚本语言。
$ ls
あ a "a" à a b 私
$ python -c 'import os, json; print json.dumps(os.listdir("."))'
["\u00e0", "\"a\"", "\u79c1", "a b", "\u3042", "a"]
发布于 2015-09-02 13:26:09
如果您知道没有文件名包含换行符,请使用jq:
ls | jq -R -s -c 'split("\n")[:-1]'
对jq的标志的简短解释:
-R
将输入视为字符串而不是JSON-s
将所有行连接到一个array-c
中创建紧凑的output[:-1]
删除输出数组中的最后一个空字符串这需要1.4或更高版本的jq。如果对你不起作用,试试这个:
ls | jq -R '[.]' | jq -s -c 'add'
https://stackoverflow.com/questions/10234327
复制相似问题