Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
this will crawl mostly system areas of macOS and attempt to parse any JSON found, it will produce a CSV as well as echo the result to the console
#!/bin/bash
#jsonReport-macOS (c) Joel Bruner 2020, MIT License
#this will crawl mostly system areas of macOS and attempt to parse JSON found
#it will produce a CSV as well as echo out to the console the result
#############
# VARIABLES #
#############
searchRoot=${1}
######################
# COMPUTED VARIABLES #
######################
myFolder=$(dirname "${0}")
dateStamp=$(date +"%Y-%m-%d_%H%M")
myCSV="${myFolder}/jsonReport-${dateStamp}.csv"
########
# MAIN #
########
read -p "Please enter a path to search [default=/]: " searchRoot
#default to /
searchRoot=${searchRoot:=/}
#remove any trailing / (or / if that is all)
searchRootPrefix=${searchRoot%/}
echo "Begin ($(date)). Finding all .json files in macOS System(ish) paths within: ${searchRoot}"
#unplug from external media and networks - despite being excluded, ALL paths are still crawled
#https://stackoverflow.com/questions/4210042/how-to-exclude-a-directory-in-find-command
#jsonFiles=$(find / -not \( -path /System/Volumes/\* \) -not \( -path /usr/local/\* \) -not \( -path /Users/\* \) -not \( -path /Applications/\* \) -not \( -path /Volumes/\* \) -not \( -path /dev/\* \) -name '*.json' 2>/dev/null)
jsonFiles=$(find "${searchRoot}" -not -path "${searchRootPrefix}/System/Volumes/*" -not -path "${searchRootPrefix}/usr/local/*" -not -path "${searchRootPrefix}/Users/*" -not -path "${searchRootPrefix}/Applications/*" -not -path "${searchRootPrefix}/Volumes/*" -not -path "${searchRootPrefix}/dev/*" -type f -name '*.json' 2>/dev/null)
#output a header for the CSV
echo "Status,Path,Error Output" | tee -a "${myCSV}"
IFS=$'\n'
for jsonFile in $jsonFiles; do
testResult=$(json_pp 2>&1 < "$jsonFile")
exitCode=$?
if [ "${exitCode}" -eq 0 ] ; then
echo "OK,${jsonFile}," | tee -a "${myCSV}"
else
echo "ERROR,${jsonFile},\"${testResult//\"/\"\"}\"" | tee -a "${myCSV}"
fi
done
echo "Finished ($(date)). Results written to: ${myCSV}"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.