Recursively cat all the files into single file

LinuxBashUnixGrepCat

Linux Problem Overview


I have bunch of files sitting in folders like

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

I want to cat all the jsons into one single file?

Linux Solutions


Solution 1 - Linux

find data/ -name '*.json' -exec cat {} \; > uber.json

a short explanation:

find <where> \
  -name <file_name_pattern> \
  -exec <run_cmd_on_every_hit> {} \; \
    > <where_to_store>

Solution 2 - Linux

Use find to get all the JSON files and concatenate them.

find data -name '*.json' -exec cat {} + > all.json

Note that this will not be valid JSON. If you want a JSON file to contain multiple objects, they need to be in a containing array or object, so you'd need to add [ ] around them and put , between each one.

Solution 3 - Linux

Alternatively -- if you have a list of your files -- you can pipe that to xargs

<path to your files> | xargs cat > all.json

Solution 4 - Linux

find ./ -type f | xargs cat > ../singlefilename

I would like this ,easy and simple.

../ avoid the error input file is output file.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionfrazmanView Question on Stackoverflow
Solution 1 - LinuxPavelView Answer on Stackoverflow
Solution 2 - LinuxBarmarView Answer on Stackoverflow
Solution 3 - LinuxcsiuView Answer on Stackoverflow
Solution 4 - LinuxLuciferJackView Answer on Stackoverflow