Skip to content
Advertisement

Get list of files that contain given text within directory given by pattern

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:

  1. loop all directories names myDir on the whole file-system
  2. 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.

Advertisement