Issue
I want to write a bash script which will use a list of all the directories containing specific files. I can use find
to echo the path of each and every matching file. I only want to list the path to the directory containing at least one matching file.
For example, given the following directory structure:
dir1/
matches1
matches2
dir2/
no-match
The command (looking for 'matches*'
) will only output the path to dir1
.
As extra background, I'm using this to find each directory which contains a Java .class file.
Solution
find . -name '*.class' -printf '%h\n' | sort -u
From man find
:
-printf
format
%h
Leading directories of file’s name (all but the last element). If the file name contains no slashes (since it is in the current directory) the%h
specifier expands to"."
.
Answered By - John Kugelman Answer Checked By - Katrina (WPSolving Volunteer)