问题
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?
回答1:
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.
回答2:
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 each file for the string txt
. Each time the string is found, the corresponding line of the file is outputted.
回答3:
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.
来源:https://stackoverflow.com/questions/43165447/what-is-the-difference-between-find-with-grep