【发布时间】:2014-07-26 23:26:30
【问题描述】:
我有一堆文件放在类似的文件夹中
data\A\A\A\json1.json
data\A\A\A\json2.json
data\A\A\B\json1.json
...
data\Z\Z\Z\json_x.json
我想将所有的 jsons 集中到一个文件中?
【问题讨论】:
-
结果不是有效的 JSON,你确定要这样做吗?
我有一堆文件放在类似的文件夹中
data\A\A\A\json1.json
data\A\A\A\json2.json
data\A\A\B\json1.json
...
data\Z\Z\Z\json_x.json
我想将所有的 jsons 集中到一个文件中?
【问题讨论】:
find data/ -name '*.json' -exec cat {} \; > uber.json
简短说明:
find <where> \
-name <file_name_pattern> \
-exec <run_cmd_on_every_hit> {} \; \
> <where_to_store>
【讨论】:
cat ./data/*/*/*/*.json > ./all.json
bash 4 和shopt -s globstar, cat ./data/**/*.json。
; 结束 exec 命令。您需要使用 `` 对其进行转义,否则它将结束整个命令。更多信息:askubuntu.com/questions/339015/…
使用find 获取所有 JSON 文件并将它们连接起来。
find data -name '*.json' -exec cat {} + > all.json
请注意,这不是有效的 JSON。如果您希望 JSON 文件包含多个对象,则它们需要位于包含数组或对象中,因此您需要在它们周围添加 [ ] 并在每个对象之间添加 ,。
【讨论】:
.json 扩展名,那就太不正常了。
find 命令,将其传送到读取每个文件名的脚本,cat "$filename"; echo ','。
,
+ 而不是; 结束-exec 选项,它将用所有文件名替换{},而不是为每个文件名单独运行命令。
或者——如果你有你的文件列表——你可以把它传送到xargs
<path to your files> | xargs cat > all.json
【讨论】:
find ./ -type f | xargs cat > ../singlefilename
我想要这个,简单易懂。
../避免错误input file is output file。
【讨论】:
find ./ -type f | fgrep -v singlefilename | xargs cat > ../singlefilename