locate
- The locatecommand performs a search of pathnames across our machine that match a given substring and then prints out any matching names.
- You have to install this command as it does not comes pre-installed
- It is nice and speedy because it uses a pre-generated database file rather than searching the entire machine.
- For example, locate chickwill perform a search for all files that contain chick in their name
- It does not matter which directory you are in as you can locate folders which are in other directories
- The -i option tells locate to ignore casing
- The -l or --limit option will limit the number of entries to a number.
  
  
  find
- The locate command is nice and easy, but it can only do so much! The find command is far more powerful! Unlike locate, find does not use a database file.
- By default, findon its own will list every single file and directory nested in our current working directory and also nested in the sub-directories.
- We can also provide a specific folder. find friends/would print all the files and directories inside the friends directory (including nested folders)
- 
You can also find empty files by running find -emptyFinding by Type- We can tell find to only find by file type: only print files, directories, symbolic links, etc using the -type option.
- 
find -type fwill limit the search to files
- 
find -type dwill limit the search to directories
 Finding by Name- We can provide a specific pattern for findto use when matching filenames and directories with the -name option. We need to enclose our pattern in quotes.
- To find all files on our Desktop that end in the .txt extension, we could run find ~/Desktop -name "*.txt"
- Use the -iname option for a case insensitive search
 Finding by Size- We can use the -size option to find files of a specific size. For example, to find all files larger than 1 gigabyte we could run find -size +1G
- To find all files under 50 megabytes, we could run find -size -50M
- To find all files that are exactly 20 kilobytes, we could run find -size 20k
 Finding by Time- mtime, or modification time, is when a file was last modified AKA when its contents last changed.
- ctime, or change time, is when a file was last changed. This occurs anytime mtime changes but also when we rename a file, move it, or alter permissions.
- atime, or access time, is updated when a file is read by an application or a command like cat.
- We can use the -mtime numoption to match files/folders that were last modified num*24 hours ago.
- 
find -mmin -20matches items that were modified LESS than 20 minutes ago.
- 
find -mmin +60matches items that were modified more than 60 minutes ago
 find -mmin -30
- find -amin nwill find files that were last accessed n minutes ago. We can specify +n for "greater than n minutes ago" and -n for "less than n minutes ago"
- find -cmin -20matches items that were changed LESS than 20 minutes ago.
- find -cmin +60matches items that were changed more than 60 minutes ago
 Logical Operators- 
We can also use the -and, -or, and -not operators to create more complex queries. 
 find -type -f -not -name "*.html" # any file except .html
 
User-Defined Actions
- We can provide find with our own action to perform using each matching pathname.
- The syntax is find -exec command {} ;
- The {} are a placeholder for the current pathname (each match), and the semicolon is required to indicate the end of the command.
- 
To delete every file that starts with contains "broken" in its file name, we could run: 
 find -name "*broken*" -exec rm '{}' ';'Note that we need to wrap the {} and ; in quotes because those characters have special meanings otherwise 
  
  
  xargs
- When we provide a command via -exec, that command is executed separately for every single element.
- 
We can instead use a special command called xargsto build up the input into a bundle that will be provided as an argument list to the next command.
 find -name "*.txt" -exec ls '{}' ';' find -name "*.txt" | xargs ls
- 
This example finds four individual chapter files (chapter1, chapter2, chapter3, and chapter4) and then passes them to the cat command, which then outputs the combined contents to a file called fullbook.txt. 
 find -name "chapter[1-4].txt" | xargs cat > fullbook.txt
- xargs reads items from standard input, separated by blanks (spaces or newlines) and then executes a command using those items 
- The mkdir command expects us to pass arguments. It doesn't work with standard input, so this example does NOT make any folders for us 
- 
We can instead add in the xargs command, which will accept the standard input coming from echo and pass them as arguments to mkdir. 
 echo "hello" "world" | mkdir # mkdir: missing operand echo "hello" "world" | xargs mkdir ls # hello world two folders made
Grep
- The grepcommand searches for patterns in each file's contents. Grep will print each line that matches a pattern we provide.
- 
For example, grep "chicken" animals.txtwill print each line from the animals.txt file that contains the pattern "chicken"
 grep PATTERN FILE
- Use the -i option with grep to make the search case insensitive. 
- grep -i "Chapter" book.txtwill print all matching lines from the book.txt file that contain the word "chapter" in any casing.
- Use the -w option to ensure that grep only matches words, rather than fragments located inside of other words. 
- grep -w "cat" book.txtwould match cat but not catheter!
- Use the -r option to perform a recursive search which will include all files under a directory, subdirectories and their files, and so on. 
- grep -r "chicken"will search the current working directory and any nested directories for lines that contain "chicken"
- The -c option tells grep to print the number of matches instead of printing the actual matches 
- The -o option tells grep to only print out the matches, rather than the entire line containing each match. 
- We can also provide regular expressions to grep by using the -E option 
 
 
              
 
    
Top comments (0)