I want something like $ grep -rin "foo bar"
but with the option to display the file location visually like tree
but with the results trimmed so that only the recursive directories are displayed. It would be better if it was structured so that the directory listing is only displayed once with every location displayed within the directory tree. Like if I want to know every location where a method is called, I can quickly parse that on the command line. Anyone know of a tool that does this already or a simple technique, or do I need to script it myself?
Combine both
grep
andtree
commands:grep -rl "find" | tree --fromfile -F
Edit: The
rg
example didn’t work correclty. Not sure what I was testing. But looks like thegrep
variant works as intended. Please report if its not.Another Edit, because this is fun: A simple function for your .bashrc (functions are like alias, but allow more complex code, such as arguments):
treegrep() { # grep: # --recursive like --directories=recurse # --files-with-match print only names of FILEs with selected lines # tree: # --fromfile Reads paths from files (.=stdin) # -F Appends '/', '=', '*', '@', '|' or '>' as per ls -F. grep --recursive --files-with-match "${@}" | tree --fromfile -F }