Linux下常用的find命令汇总
Linux 下的find命令是很强大的查找命令,但花费的时间比较多。(因为find是直接在硬盘查找,如果你对硬盘比较老旧了,就得等很久了,而where is查找依赖于文件数据库搜索,优点是速度快,但是最大缺点是实时性慢)。它是将档案系统内符合 expression 的档案列出来。你可以指定档案的名称、类别、时间、大小、权限等不同资讯的组合,只有完全相符的才会被列出来。
find命令的格式:
find [-path……] -options [-print -exec -ok]
path:要查找的目录路径。
~表示$HOME目录
. 表示当前目录(.可省略)
/ 表示根目录
在myfile目录下有10个文件:
[wzb@www myfile]$ ls
目录默认文件属性为775,此处dir和dir1修改为664;
drw-rw-r--. 2 wzb wzb 4096 Mar26 22:23 dir
drw-rw-r--. 2 wzb wzb 4096 Mar26 22:23 dir1
-r-xr--r--. 1 wzb wzb 0 Mar 26 21:34 file1.doc //此处文件权限已修改为544
-r-xr--r--. 1 wzb wzb 0 Mar 26 21:35 file2.txt //此处文件权限已修改为544
-rw-rw-r--. 1 wzb wzb 0 Mar 26 21:35 file3.xls //文件默认权限为664
-rw-rw-r--. 1 wzb wzb 0 Mar 26 21:35 file4.ppt
-rw-rw-r--. 1 wzb wzb 0 Mar 26 21:36 file5.doc
-rw-rw-r--. 1 wzb wzb 0 Mar 26 21:34 file.doc
-rw-rw-r--. 1 wzb wzb 0 Mar 26 21:50 test.c
-rw-rw-r--. 1 wzb wzb 0 Mar 26 21:51 world.exe
1、按名字查找:
find -name '*.txt'
(1)在当前目录下查找以.txt结尾的文件。
[wzb@www myfile]$ find -name '*.txt'
./file2.txt
(2)find-name 'file*'
在当前目录下查找以file开头的文件。
[wzb@www myfile]$ find -name'file*'
./file5.doc
./file4.ppt
./file3.xls
./file.doc
./file1.doc
./file2.txt
[wzb@www myfile]$
(3)find-name '[k-z]*'
(1)在当前目录下查找以字母k到z之间的文件。
[wzb@www myfile]$ find -name'[k-z]*'
./world.exe
./test.c
(4) [ ]内也可以是数字,如find -name 'file[1-5]*'
在当前目录下查找以file开头的前5个的文件。
[wzb@www myfile]$ find -name'file[1-5]*'
./file5.doc
./file4.ppt
./file3.xls
./file1.doc
./file2.txt
2、按权限查找
find –perm +文件属性(544)
在当前目录下查找属性为544的文件。
(1)[wzb@www myfile]$find -perm 544
./file1.doc
./file2.txt
(2)find -perm 664(注意:目录和文件都查找到并显示出来)
./dir1
./file5.doc
./file4.ppt
./file3.xls
./file.doc
./world.exe
./test.c
./dir
(3)若只想查找属性为664的目录文件,该怎么查找呢?
[wzb@www myfile]$ find -perm664 | find -type d
./dir1
./dir
(4)若只想查找属性为664的普通文件,又该怎么查找呢?
[wzb@www myfile]$ find -perm664 | find -type f
./file5.doc
./file4.ppt
./file3.xls
./file.doc
./file1.doc
./world.exe
./test.c
./file2.txt
4、按属主及属组查找
(1)find -user root
在当前目录下查找属性为root的文件
[wzb@www code]$ find -user root
find: `./file33': Permission denied
注意:file33是一个没有任何权限的文件
(2) 查找属主是www的文件 $ find / -user www (3)查找属主被删除的文件 $ find / -nouser (4) 查找属组mysql的文件 $ find / -group file
(5)查找用户组被删掉的文件 $ find / -nogroup
4、按时间查找:
find /var –mtime -1(+1是查找1天以前被修改的文件)
在var下找更改时间为1天以内的文件。
-rw-rw-r--.1 wzb wzb 6 Mar 28 05:49 file1.ppt
-r-xr--r--. 1 wzb wzb 0 Mar 26 21:35 file2.txt
-rw-rw-r--. 1 wzb wzb 0 Mar 26 21:35 file3.xls
-rw-rw-r--. 1 wzb wzb 0 Mar 26 21:35 file4.ppt
-rw-rw-r--. 1 wzb wzb 0 Mar 26 21:36 file5.doc
-rw-rw-r--. 1 wzb wzb 0 Mar 26 21:34 file.doc
--w--w--w-. 1 wzb wzb 0 Mar 26 21:50 test.c
-rw-rw-r--. 1 wzb wzb 0 Mar 26 21:51 world.exe
[wzb@wwwmyfile]$ find -mtime -1
.
./file1.ppt
与之类似按时间查找还有: (1)查找一天内被访问的文件 $ find . -atime -1
(2)查找一天前被访问的文件 $ find . -atime +1 (3)查找一天内状态被改变的文件 $ find . -ctime -1 (4)查找一天前状态被改变的文件 $ find . -ctime +1 (5)查找10分钟以前状态被改变的文件 $ find . -cmin +10
5、按类型查找
在当前目录及子目录下,查找目录文件
$ find . -type l –print
[wzb@www myfile]$ find -type d
.
./dir1
./dir
6、按文件新旧查找: 查找比"file5.doc"新的文件
[wzb@www myfile]$ find . -newer "file5.doc"
.
./dir1
./file1.ppt
./world.exe
./test.c
./dir
查找比"file5.doc"旧的文件 $ find . ! -newer " file5.doc " 查找比"file5.doc"新,"dir"旧的文件 $ find . -newer “file5.doc '”! -newer “dir”
7、按文件大小查找: 查找超过1k的文件
[wzb@www myfile]$ find -size +1k
.
./dir1
./dir 查找小于2k的文件 $ find . -size 2k
[wzb@www myfile]$ find -size -2k
./file1.ppt
./file5.doc
./file4.ppt
./file3.xls
./file.doc
./file1.doc
./world.exe
./test.c
./file2.txt
查找等于3字节的文件 $ find -size 3c
8、执行命令 查找del.txt并删除,删除前提示确认 $ find -name ' file1.doc' -ok rm {} \;
[wzb@www myfile]$ ls
dir file1.doc file3.xls file5.doc test.c
dir1 file2.txt file4.ppt file.doc world.exe
[wzb@www myfile]$ find -name "file1.doc" -ok rm {} \;
< rm ... ./file1.doc > ? y
[wzb@www myfile]$ ls
dir file2.txt file4.ppt file.doc world.exe
dir1 file3.xls file5.doc test.c
查找test.c 并备份为hello.c
$ find -name “test.c”-exec cp {} {}.bak \