It is suggested that you
use
Python (the pathlib
module),
ripgrep,
fselect
or
osquery
(currently have some bugs)
instead of find
to locate files.
- The Python module
pathlib
is the most suitable one for relatively complex jobs. ripgrep
is a more user-friendly alternative to find.- Both fselect and osquery support SQL-like syntax and are more intuitive than the
find
command.
Search Files By Name
-
Find all files with the extension ".out" in the current directory and its subdirectory, and then make them executable.
find . -type f -iname *.out -exec chmod +x '{}' \; # or you can use find . -type f -iname *.out -print0 | xargs -0 chmod +x
-
Find files whose names contain "conflicted" and remove them.
find . -iname '*conflicted*' -print0 | xargs -0 rm
-
Find Python scripts in the current directory recursively but ignore those under directories with the name
.ipynb_checkpoints
.:::bash find . -type f -iname '.py' -not -path '/.ipynb_checkpoints/*'
Search Files by Size
-
Find files with 0 size and delete them.
find /path/to/files -size 0 -ok -exec rm {} \; # or you can use find /path/to/files -size 0 -ok | xargs rm
-
Find empty directories.
find / -type d -empty
-
Find files greater than 1G.
find . -xdev -type f -size +1G
-
First find files and then pass them to other commands is a very useful trick. For example, you can use the following command to find all R scripts containing the word
paste
.find . -type f -iname '*.r' | grep --color=auto paste
Search Files by Time
-
Find files created with in 60 minutes.
find . -cmin 60
-
Find files more than 30 days ago
find . -ctime +30
-
Find file less than 30 days ago.
find . -ctime -30
-
Find files that are exactly 30 days ago.
find . -ctime 30
-
Find all files modified on the June 7, 2007 in the current directory.
find . -type f -newermt 2007-06-07 ! -newermt 2007-06-08
-
Find all files accessed on the Sep 29, 2008 in the current directory.
find . -type f -newerat 2008-09-29 ! -newerat 2008-09-30
-
Find files which had their permission changed on the same day.
find . -type f -newerct 2008-09-29 ! -newerct 2008-09-30
Search Files by Type
-
Find broken symbolic links.
find . -xtype l # or find -L . -type l
-
Find executable files in current directory
find . -maxdepth 1 -type f -executable
-
Check file type of all files under the current directory.
find . -type f | xargs file
Search Files by User Permission
-
Find files that belong to a user but writable by its group or other people.
find /path/to/file -user user1 -perm /022
-perm mode: File's permission bits are exactly mode (octal or symbolic). -perm -mode: All of the permission bits mode are set for the file. -perm /mode: Any of the permission bits mode are set for the file. a little bit trick about how to understand the last 2 permission criterias. as suggested, think in terms of permission BITs (0/1)
-
The following command finds all files that readable or writable by the group or (readable or writable) by others.
:::bash find /path/to/file -user user1 -perm /066
-
The following command find all files that readable and writable by the group and (readable and writable) by others.
:::bash find /path/to/file -user user1 -perm -066
-
The following command find all files that readable or writable by the group and (readable or writable) by others.
:::bash find /path/to/file -user user1 -perm /060 -perm /006
References
https://www.cyberciti.biz/faq/find-command-exclude-ignore-files/
https://linuxconfig.org/how-to-explicitly-exclude-directory-from-find-command-s-search