node.js - Find and merge all package.json files into one using jq in bash? -


how can find package.json files , merge them 1 file using jq within bash? following snippet far have gotten, appends files:

find ../../projects -maxdepth 4 -type f -name "package.json" \   -exec cat {} + | jq -s . > $(curdir)/node/.tmp/package.json 

i have tried using 'add' seems overwrite target each time without merging two.

my project structure initially looks this:

\ projects   \ webapp      \ package.json   \ service      \ package.json   \ admin      \ package.json \ solutions   \ killersolution        makefile      \ node 

and should after make prenode (see below):

\ projects   \ webapp      \ package.json   \ service      \ package.json   \ admin      \ package.json \ solutions   \ killersolution        makefile      \ node         \ .tmp           \ package.json   <- created 

i using makefile kick off:

prenode:                                                                    @find ./node -type d -name ".tmp" -exec rm -rf {} +;                    @mkdir -p ./node/.tmp                                                   @find ../../solutions -maxdepth 4 -type f -name "package.json" -exec cat {} + ...  

edit #1 : example input & output
let assume 3 package.json files found. dependencies , devdependencies different must combined:

found file #1 ...

{   "name":"project-a",   "dependencies":{     "module-a":"1.2.3"   } } 

found file #2 ...

{   "name":"project-b",   "dependencies":{     "module-b":"2.3.4"   } } 

found file #3 ...

{   "name":"project-c",   "devdependencies":{     "gulp":"*"   } } 

... combined make following file:

{   "name":"project-c",   "dependencies":{     "module-a":"1.2.3",     "module-b":"2.3.4"   },   "devdependencies":{     "gulp":"*"   } } 

*note: name property, in final output file, irrelevant. key here merge of dependencies , devdependencies objects.

assuming following find command works (adjust if necessary)

find ../../projects -name package.json 

here solution uses jq * operator along reduce , -s option merge objects:

jq -s 'reduce .[] $d ({}; . *= $d)' $(find ../../projects -name package.json) 

if prefer can concatenate files , send them jq

find ../../projects -name package.json -exec cat {} \; | \   jq -m -s 'reduce .[] $d ({}; . *= $d)' 

as noted in reply comment if you're doing in makefile need take steps deal $ or put filter in file , use -f


Comments

Popular posts from this blog

android - InAppBilling registering BroadcastReceiver in AndroidManifest -

python Tkinter Capturing keyboard events save as one single string -

sql server - Why does Linq-to-SQL add unnecessary COUNT()? -