The
command find is used to search a given directory for a file or a given
expression mentioned in the command. we can also do necessary actions on the
output files using xargs
Some important options:
-xdev Stay on the same file system (dev in fstab).
-exec cmd {} \; Execute the command and replace {} with the full path
-iname Like -name but is case insensitive
-ls Display information about the file (like ls -la)
-size n n is +-n (k M G T P)
-cmin n File's status was last changed n minutes ago.
Some important options:
-xdev Stay on the same file system (dev in fstab).
-exec cmd {} \; Execute the command and replace {} with the full path
-iname Like -name but is case insensitive
-ls Display information about the file (like ls -la)
-size n n is +-n (k M G T P)
-cmin n File's status was last changed n minutes ago.
find . -type f ! -perm -444
|
Find files not readable by all
|
find . -type d ! -perm -111
|
Find dirs not accessible by all
|
find /home/user/ -cmin 10 -print
|
Files created or modified in the last 10 min.
|
find . -name '*.[ch]' | xargs grep -E 'expr'
|
Search 'expr' in this dir and below.
|
find / -name "*.core" | xargs rm
|
Find core dumps and delete them
|
find / -name "*.core" -print -exec rm {} \;
|
Other syntax
|
find . \( -name "*.png" -o -name
"*.jpg" \) -print
|
iname is not case sensitive
|
find . -type f -name "*.txt" ! -name README.txt
-print
|
Exclude README.txt files
|
find /var/ -size +1M -exec ls -lh {} \;
|
|
find /var/ -size +1M -ls
|
Find in /var files above 1M and longlist them
|
find . -size +10M -size -50M -print
|
|
find /usr/ports/ -name work -type d -print -exec rm -rf {}
\;
|
Clean the ports
|
Find files with SUID; those file have to be kept secure.
Some more Examples:
1 .To list all files in the file system with a given base file name, type:
find / -name .profile -print
This searches the entire file system and writes the complete path names of all files named .profile.
The / (slash) tells the find command to search the root directory and all of its subdirectories.
In order not to waste time, it is best to limit the search by specifying the directories where you think the
files might be.
2. To list files having a specific permission code in the current directory tree, type:
find . -perm 0600 -print
This lists the names of the files that have only owner-read and owner-write permission. The . (dot) tells the find command to search the current directory and its subdirectories. See the chmod command for an explanation of permission codes.
3. To search several directories for files with certain permission codes, type:
find manual clients proposals -perm -0600 -print
This lists the names of the files that have owner-read and owner-write permission and possibly other permissions. The manual, clients, and proposals directories and their subdirectories are searched. In the previous example, -perm 0600 selects only files with permission codes that match 0600 exactly.
In this example, -perm -0600 selects files with permission codes that allow the accesses indicated by 0600 and other accesses above the 0600 level. This also matches the permission codes 0622 and 2744.
4 .To list all files in the current directory that have been changed during the current 24-hour period, type:
find . -ctime 1 -print
5 .To search for regular files with multiple links, type:
find . -type f -links +1 -print
This lists the names of the ordinary files (-type f) that have more than one link (-links +1). Note: Every directory has at least two links: the entry in its parent directory and its own . (dot) entry. The ln command explains multiple file links.
6 . To find all accessible files whose path name contains find, type:
find . -name '*find*' -print
7. To remove all files named a.out or *.o that have not been accessed for a week and that are not mounted using nfs, type:
find / \( -name a.out -o -name '*.o' \) -atime +7 ! -fstype nfs -exec rm {} \;
Note: The number used within the -atime expression is +7. This is the correct entry if you want the command to act on files not accessed for more than a week (seven 24-hour periods).
8 . To print the path names of all files in or below the current directory, except the directories named SCCS or files in the SCCS directories, type:
find . -name SCCS -prune -o -print
To print the path names of all files in or below the current directory, including the names of SCCS directories, type:
find . -print -name SCCS -prune
9. To search for all files that are exactly 414 bytes long, type:
find . -size 414c -print
10. To find and remove every file in your home directory with the .c suffix, type:
find /u/arnold -name "*.c" -exec rm {} \;
Every time the find command identifies a file with the .c suffix, the rm command deletes that file. The rm command is the only parameter specified for the -exec expression. The {} (braces) represent the current path name.
11 .In this example, dirlink is a symbolic link to the directory dir. You can list the files in dir by refering to the symbolic link dirlink on the command line. To do this, type:
find -H dirlink -print
12 . In this example, dirlink is a symbolic link to the directory dir. To list the files in dirlink, traversing the file hierarchy under dir including any
symbolic links, type:
find -L dirlink -print
13 . To determine whether the file dir1 referred by the symbolic link dirlink is newer than dir2, type:
find -H dirlink -newer dir2
Note: Because the -H flag is used, time data is collected not from dirlink but instead from dir1, which is found by traversing the symbolic link.
14. To produce a listing of files in the current directory in ls format with expanded user and group name, type : find . -ls -long
15 .To list the files with ACL/EA set in current directory, type:
find . -ea
No comments:
Post a Comment