Suppose you are looking for a file in Linux, but you have forgotten its name. You only remember the contents of the file. How will you find the file in this case? Well, there are some useful methods that will help you find a file containing a specific text (or string) in Linux. The string needs to be specified by the user. So, let’s take a look at the methods:
Methods to Find All Files Containing Specific Text (string) on Linux
Method 1: grep command
grep command in Linux that is used to search for files containing a specific text or string. By default, it shows us the lines in the files that contain the particular text. If we append the -l option to it, the command will show us all the files that contain the particular text.
Suppose, we have a directory that contains two files named file1.txt and file2.txt.
Contents of file1.txt:
This line contains text.
Contents of file2.txt:
You should learn Data Structures & Algorithms.
Now, we will use the grep command with the -l option to search for text in given files located inside the current directory. See the following example:
It can be clearly said from the above example that the grep command has successfully found the given string in file1.txt. As a result, it displayed the file name on the screen.
We can also use the -i option to tell grep to ignore the case. Look at the following example:
Above, we have first used the previous command, but the given string is Text. Because file1.txt contains text, not Text, it is not taken into consideration. Here, the search operation is performed keeping the case in mind. Then, we used the -i option. As a result, the case is ignored and the given string matches with the one that file1.txt contains. Hence, the file name is displayed on the screen.
Another variation is to use the -r option. It suggests grep to search for the given string in the current directory and its subdirectories recursively. Look at the below example:
file1.txt and file2.txt are located in the files folder, not in the current directory, i.e. desktop. So, if we don’t use the -r option, no files with matching strings will be found because they don’t exist in the current directory. But we used the -r option and also omitted the file names. As a result, grep searches for matching strings in not only the current directory but also in its subdirectories as well. Hence, file1.txt is found and displayed on the screen.
Method 2: The combination of find and grep command
find is another useful command in Linux. We will combine find with the -type f option to search for files and the -exec option to apply to grep on the files that are found. Look at the following example:
Clearly, the search operation finds file1.txt as it contains the matching string. Hence, the file name is displayed on the screen.
Method 3: Find files containing specific text with mc
We can also search for files using Midnight Commander (mc). Open the application and press Alt + Shift + ? to open the Find File dialogue box. You will see a Starting box at the top. In the box, type the path where the files exist. Then, under the content box, type the string you want to search. In our case, we searched for text in the Files directory:
It can be clearly seen below that the search operation has successfully found file1.txt, which contains the matching string.
Method 4: ripgrep command
ripgrep (written as rg) is a command that can be used as an alternative to the grep command. The implementation is below:
file1.txt is found and hence, the file name is displayed on the screen.
Method 5: ack command
Yet another command we can use is the ack command. Here is the implementation:
file1.txt is successfully found and displayed on the screen.
Whether you're preparing for your first job interview or aiming to upskill in this ever-evolving tech landscape, GeeksforGeeks Courses
are your key to success. We provide top-quality content at affordable prices, all geared towards accelerating your growth in a time-bound manner. Join the millions we've already empowered, and we're here to do the same for you. Don't miss out - check it out now!