Last active
November 12, 2024 19:23
-
-
Save gr1ev0us/3a9b9d9dbdd38f6379288eb2686fc538 to your computer and use it in GitHub Desktop.
Cheatsheet for find linux
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# List of cheatsheet for linux find. | |
# Taken from here http://alvinalexander.com/unix/edu/examples/find.shtml | |
# 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 | |
# 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" |
I am using macOS, and it says that -x is equivalent to the deprecated -xdev primary.
here . There could be difference between macOS and Linux.
# search for files containing spaces and replace them with underscores using perl-rename
find . -depth -name '* *' -execdir perl-rename -v 's/ /_/g' {} +
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Hi, can you point me to any relevant documentation about the
-xdev
being deprecated?My current find version (under Fedora 32) doesn't accept a
-x
toggle..