Reputation: 758
What is the difference between these command:
find . –type f –name '*txt*'
and
find . –type f | grep 'txt'
I tried to run this and there is a difference but I want to know why?
Upvotes: 26
Views: 31393
Reputation: 2537
In your first example, you are using the find
utility to list the filenames of regular files where the filename includes the string txt
.
In your second example, you are using the find
utility to list the filenames of regular files and feeding the resultant filenames via a pipe to the grep
utility which searches the contents of the pipe (a list of filenames, one per line) for the string txt
. Each time this string is found, the corresponding line (which is a filename) is outputted.
Upvotes: 4
Reputation: 1533
The difference between the two is that in the first case, find is looking for files whose name (just name) matches the pattern.
In the second case, find is looking for all files of type 'f' and outputting their relative paths as strings. That result gets piped to grep, which filters the input strings to those matching the pattern. The pattern 'txt' will filter the filepath results for the pattern. Importantly, the second case will include filepaths that match anywhere in the path, not just in the filename. The first case will not do that.
Upvotes: 0
Reputation: 1528
The Major difference is FIND is for searching files and directories using filters while GREP is for searching a pattern inside a file or searching process(es)
FIND is an command for searching file(s) and folder(s) using filters such as size , access time , modification time.
The find command lists all of the files within a directory and its sub-directories that match a set of filters.
This command is most commonly used to find all of the files that have a certain name.
To find all of the files named theFile.txt in your current directory and all of its sub-directories, enter:
find . -name theFile.txt -print
To look in your current directory and its sub-directories for all of the files that end in the extension .txt , enter:
find . -name "*.txt" -print
GREP :(Globally search a Regular Expression and Print)
Searches files for a specified string or expression.
Grep searches for lines containing a specified pattern and, by default, writes them to the standard output.
grep myText theFile.txt
Result : Grep will print out each line contain the word myText.
Upvotes: 33
Reputation: 20022
When you have a path with txt
in the directory name, the second command will find a match. When you do not want to match paths like txtfiles/allfiles.tgz
and transactions/txtelevisions/bigscreen.jpg
you will want to use the first.
Upvotes: 1