find命令用于查找文件,其命令格式为:

1find  [起始目录]  [搜索条件]  [操作]

其中[起始目录]是指命令将从该目录起,遍历其下的所有子目录,查找满足条件的文件。该目录默认是当前目录。[搜索条件]是一个逻辑表达式,当表达式为”真”时,搜索条件成立,为”假”时不成立。搜索条件的一般表达式及其说明见表6.20。表6.20 find命令搜索条件的一般表达式及其说明

搜索条件 说 明
-name ‘字符串’ 查找文件名中包含所给字符串的所有文件
-user ‘用户名’ 查找属于指定用户的文件
-group ‘用户组名’ 查找属于指定用户组的文件
-type x 查找类型为x的文件,类型包括b(块设备文件),c(字符设备文件), d(目录文件),p(命名管道文件), f(普通文件),l(符号链接文件), s(socket文件)
-atime n 查找n天以前被访问过的文件
-size n 指定文件大小为n
-perm 查找符合指定权限值的文件或目录
-mount 要查找文件时不跨越文件系统mount点
-follow 如果find命令遇到符号链接文件,就跟踪到链接所指向的文件
-cpio 对匹配的文件使用cpio命令,将文件备份到磁带设备中
-newer file1 ! file2 查找更改时间比文件file1晚但比文件file2早的文件
-prume 不在指定的目录中查找,如果同时指定-depth选项,那么-prune将被 find命令忽略
-ok 和exec作用相同,但在执行每一个命令之前,都会给出提示,由用户来确定是否执行
-depth 在查找文件时,首先查找当前目录,然后再在其他子目录中查找
-exec 命令名 {} ; 不需确认执行命令。注意: “{}”代表找到的文件名,“}”与“”之间有空格
-print 送往标准输出
 1例如从当前目录查找所有以.txt结尾的文件并在屏幕上显示出来,命令行为:
 2find  .  -name  '*.txt'   -print
 3
 4查找两个后缀的文件,就改为下面的用法:
 5find . ( -name *.xml -o -name *.sh )
 6
 7再如从根目录查找类型为符号连接的文件,并将其删除,命令行为:
 8find  /  -type  l  -exec  rm {} ;
 9
10只查找文件,不包含目录的(该行,不能加--print,加了会报错):
11find  . -type f
12
13又如从当前目录查找用户tom的所有文件并在屏幕上显示,命令行为:
14find  .  -user  'tom'   -print
15
16又如显示当前目录中大于20字节的.c文件名,命令行为:
17find  . -name  "*.c"  -size  +20c  -print
18
19显示当前目录中恰好10天前访问过的文件名,命令行为:
20find  .  -atime  10  -print
21
22显示当前目录中不到10天前访问过的文件名,命令行为:
23find  .  -atime  -10  -print
24
25查找/home目录下权限为640的文件或目录,命令行为:
26find  /home  -perm 640
27
28搜索根目录下大于100KB的文件,并显示,命令行为:
29find  /  -size  +100K  -print
30
31搜索根目录下小于500KB的文件,命令行为:
32find  /  -size  -500K  -print
33
34删除文件大小为0的文件
35rm -i `find ./ -size 0`
36find ./size 0 exec rm {} ;
37find ./size 0|xargs rm -rf
38在当前目录中查找所有文件名以.doc结尾,且更改时间在5天以上的文件,找到后进行删除,且删除前给出提示,命令行为:
39find  .  -name  '*.doc'  -mtime +5  -ok  rm {} ;或
40find . -mtime +5 -name "*.*" -exec rm -f {} ;  自动删除当前目录五天以前的文件

注:后面的反斜杠不能少,不然会报 ”find: 遗漏”-exec”的参数” 。

在当前目录下查找所有链接文件,并以长格式显示文件的基本信息,命令行为:

 1# find  .  -type l  -exec  ls  -l {} ;
 2lrw-rw-r-- 1 root root 36 07-27 14:34 ./example2
 3lrw-rw-r-- 1 root root 72 07-27 14:36 ./example3
 4lrw-rw-r-- 1 root root 36 07-27 14:36 ./example1
 5
 6在当前目录中查找文件名由一个小写字母、一个大写字母和两个数字组成,且扩展名为.doc的文件,并显示,命令行为:
 7find  .  -name  ' [a-z][A-Z][0-9][0-9].doc'  -print
 8
 9查找空文件夹:
10find -type d -empty

后记:

 1#Bash find files between two dates:
 2#Returns a list of files that have timestamps after 2010-10-07 and before 2014-10-08
 3find . -type f -newermt 2010-10-07 ! -newermt 2014-10-08
 4
 5#Returns files with timestamps between 2014-10-08 10:17:00 and 2014-10-08 10:53:00
 6find . -type f -newermt "2014-10-08 10:17:00" ! -newermt "2014-10-08 10:53:00"
 7
 8#Knowing immediately as files are skipped due to duplicate names:
 9find srcdir -type f -newermt 2014-08-31 ! -newermt 2014-09-30 -exec mv -n {} destdir/ \; \
10    -exec [ -f {} ] \; -exec printf "\`%s' skipped (exists in \`%s')\\n" {} destdir \;