05. Links and find command

find command

  • find: searches a given part of the system directory tree for any file that matches some given criteria
  • Basic format: find start_dir criteria_list
    • start_dir is the directory from which find will start the search
    • start_dir can be an absolute path or a relative path
    • If it is a relative path, start_dir is relative to the directory where find is run
    • If no start_dir is given, find starts the search from the current directory
    • criteria_list tells search what to look for
    • The criteria_list can be 1 or more criteria
  • find does a recursive search from the start directory, which means it will go down all subdirectories of each directory that it encounters
  • When ls is used to search for a file, the search only occurs at the directory that is given as the argument to ls
    • When find is use to search for a file, the search starts at the directory given and proceeds down all subdirectories, so it is a deeper search
  • find is a powerful command that can do work (take action) on the files it found that match the criteria.
    • The action on the files can include removing the files, modifying the files, copying the files to another location, etc.
    • Printing the location of the matched files is the default action of find
    • When printing the location of the matched files, find prints the path of the matched files with respect to the start_dir

Criteria for find

  • Files matching filename
    • -name filename all files matching filename
    • -name ‘name_with_wildcards’ all filenames matching name_with_wildcards (single quotes are required)
  • Files of a certain file type
    • -type d all files that are directories
    • -type f all files that are regular files
    • -type l all files that are links (only symbolic link)
  • Files with a certain permission
    • -perm octal_mode all files with mode matching octal_mode (see File Permissions section for octal_mode)
  • Files that are empty
    • -empty applies to regular files and directories
  • Files with a certain number of hard links
    • -links +num all files with number of hard links greater than num
    • -links num all files with number of hard links equal num
    • -links –num all files with number of hard links less than num, num is a number
  • Hard links to a file
    • -inum inode_num all files with a certain inode_num, Recall: inode_num is found by using ls –i
  • Symbolic links pointing to a certain file
    • -lname path all links that contain a specific path
    • -lname ‘path_with_wildcards’ all links that contain paths that match the path_with_wildcards (single quotes are required)
    • Recall: when a symbolic link points to a file, it contains the path to that file. The –lname option looks at the path in the symbolic links for a match. If there is a match, it means the link points to that file.
  • find accepts one or more criteria
  • To use more than one criteria
    • AND
      • the file has to match all criteria listed
      • List the criteria separated by space
      • Example: find ~ -type d -empty
    • OR:
      • the file has to match at least 1 criterion in the list
      • List all criteria separated by -o (for or)
      • Example: find ~ -type d -o -type f