# List of cheatsheet for linux find. # Syntax find # basic 'find file' commands # -------------------------- find / -name foo.txt -type f -print # full command find / -name foo.txt -type f # -print isn't necessary find / -name foo.txt # don't have to specify "type==file" find . -name foo.txt # search under the current dir find . -name "foo.*" # wildcard find . -name "*.txt" # wildcard find /users/al -name Cookbook -type d # search '/users/al' # search multiple dirs # -------------------- find /opt /usr /var -name foo.scala -type f # search multiple dirs # case-insensitive searching # -------------------------- find . -iname foo # find foo, Foo, FOo, FOO, etc. find . -iname foo -type d # same thing, but only dirs find . -iname foo -type f # same thing, but only files # find files with different extensions # ------------------------------------ find . -type f \( -name "*.c" -o -name "*.sh" \) # *.c and *.sh files find . -type f \( -name "*cache" -o -name "*xml" -o -name "*html" \) # three patterns # find files that don't match a pattern (-not) # -------------------------------------------- find . -type f -not -name "*.html" # find all files not ending in ".html" # find files by text in the file (find + grep) # -------------------------------------------- find . -type f -name "*.java" -exec grep -l StringBuffer {} \; # find StringBuffer in all *.java files find . -type f -name "*.java" -exec grep -il string {} \; # ignore case with -i option find . -type f -name "*.gz" -exec zgrep 'GET /foo' {} \; # search for a string in gzip'd files # Explanation of below command find /path/to/directory -type f -name "*.txt" -exec grep "search_term" {} \; Explanation: find /path/to/directory searches for files in the specified directory and its subdirectories. -type f specifies that the files to be searched are regular files (not directories or other types). -name "*.txt" filters the search to include only files with the extension .txt. -exec grep "search_term" {} \; executes the grep command with the specified search term on each file found. {} is replaced by the actual file path during execution. \; marks the end of the -exec command. In this example, the find command is used to locate all .txt files in the specified directory and its subdirectories. The -exec option is used to execute the grep command on each file, searching for the specified term. The {} placeholder and semicolon ; play a crucial role in constructing and executing the command correctly for each file found by find # 5 lines before, 10 lines after grep matches # ------------------------------------------- find . -type f -name "*.scala" -exec grep -B5 -A10 'null' {} \; # (see http://alvinalexander.com/linux-unix/find-grep-print-lines-before-after-search-term) # find files and act on them (find + exec) # ---------------------------------------- find /usr/local -name "*.html" -type f -exec chmod 644 {} \; # change html files to mode 644 find htdocs cgi-bin -name "*.cgi" -type f -exec chmod 755 {} \; # change cgi files to mode 755 find . -name "*.pl" -exec ls -ld {} \; # run ls command on files found # find and copy # ------------- find . -type f -name "*.mp3" -exec cp {} /tmp/MusicFiles \; # cp *.mp3 files to /tmp/MusicFiles # copy one file to many dirs # -------------------------- find dir1 dir2 dir3 dir4 -type d -exec cp header.shtml {} \; # copy the file header.shtml to those dirs # find and delete # --------------- find . -type f -name "Foo*" -exec rm {} \; # remove all "Foo*" files under current dir find . -type d -name CVS -exec rm -r {} \; # remove all subdirectories named "CVS" under current dir # find files by modification time # ------------------------------- find . -mtime 1 # 24 hours find . -mtime -7 # last 7 days find . -mtime -7 -type f # just files find . -mtime -7 -type d # just dirs # find files by modification time using a temp file # ------------------------------------------------- touch 09301330 poop # 1) create a temp file with a specific timestamp find . -mnewer poop # 2) returns a list of new files rm poop # 3) rm the temp file # find with time: this works on mac os x # -------------------------------------- find / -newerct '1 minute ago' -print # find and tar # ------------ find . -type f -name "*.java" | xargs tar cvf myfile.tar find . -type f -name "*.java" | xargs tar rvf myfile.tar # (see http://alvinalexander.com/blog/post/linux-unix/using-find-xargs-tar-create-huge-archive-cygwin-linux-unix for more information) # find, tar, and xargs -------------------- find . -name -type f '*.mp3' -mtime -180 -print0 | xargs -0 tar rvf music.tar (-print0 helps handle spaces in filenames) # (see http://alvinalexander.com/mac-os-x/mac-backup-filename-directories-spaces-find-tar-xargs) # find and pax (instead of xargs and tar) # --------------------------------------- find . -type f -name "*html" | xargs tar cvf jw-htmlfiles.tar - find . -type f -name "*html" | pax -w -f jw-htmlfiles.tar # (see http://alvinalexander.com/blog/post/linux-unix/using-pax-instead-of-tar) # exclude files from other devices (like depreceted -xdev in macOS). For linux: -xdev find -x . -type f -name "*.java"