I want to get a list of files that contain a given text within my file-system. Furthermore only files should be considdered that are located in a directoy given by a pattern.
So let´s say I have a number of directories called myDir
within my filelsystem as shown here:
/usr /myDir /tmp /myDir /anotherDir
Now I want to get all the files within those directories that contain the text.
So basically I need to perform these steps:
- loop all directories names
myDir
on the whole file-system - for every directory within that list get the files that contain the search-string
What I tried so far is find /etc /opt /tmp /usr /var -iname myDir -type d -exec ls -exec grep -l "SearchString" {} ;
However this doesn´t work as the results of find
are directories which I may not use as input for grep
. I assume I have to do one step in between the find
and the grep
but can´t find out how to do this.
Advertisement
Answer
I think I got it and will show you a little script that achieves what I need:
for i in $(find / -type d -iname myDir) do for j in $(find "$i" -type f) do grep "SearchString" "$j" done done
This will give me all the files that contain the SearchString
and are located in any of the folders named myDir
.