find命令用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。
语法
find path -option [ -print ] [ -exec -ok command ] {} \;
参数说明 :
find 根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部份为 path,之后的是 expression。如果 path 是空字串则使用目前路径,如果 expression 是空字串则使用 -print 为预设 expression。
expression 中可使用的选项有二三十个之多,在此只介绍最常用的部份。
-mount, -xdev : 只检查和指定目录在同一个文件系统下的文件,避免列出其它文件系统中的文件
-amin n : 在过去 n 分钟内被读取过
-anewer file : 比文件 file 更晚被读取过的文件
-atime n : 在过去n天内被读取过的文件
-cmin n : 在过去 n 分钟内被修改过
-cnewer file :比文件 file 更新的文件
-ctime n : 在过去n天内被修改过的文件
-empty : 空的文件-gid n or -group name : gid 是 n 或是 group 名称是 name
-ipath p, -path p : 路径名称符合 p 的文件,ipath 会忽略大小写
-name name, -iname name : 文件名称符合 name 的文件。iname 会忽略大小写
-size n : 文件大小 是 n 单位,b 代表 512 位元组的区块,c 表示字元数,k 表示 kilo bytes,w 是二个位元组。-type c : 文件类型是 c 的文件。
d: 目录
c: 字型装置文件
b: 区块装置文件
p: 具名贮列
f: 一般文件
l: 符号连结
s: socket
-pid n : process id 是 n 的文件
你可以使用 ( ) 将运算式分隔,并使用下列运算。
exp1 -and exp2
! expr
-not expr
exp1 -or exp2
exp1, exp2
实例
find -name 查找某个文件,文件名为name
例如:
find /etc/ -name abc 查找/etc/目录下名为abd的文件并输出
find /etc -name *.conf 查找/etc/目录下所有以.conf结尾的文件
find /etc -name VBM 查找/etc/目录下所有以VBM开头的文件
find -user name 查找某个文件所有人为user的文件
find -group name 查找某个文件所有组为group的文件
find -user name1 -group name2,查找文件所有人为name1且所有组为name2的文件
find -not -user name 查找文件所有人不为name的文件 (-not表示反的意思)
find -not -user test-o -group root 查找文件所有人不为test或者文件所有组为root的文件 -o表示或者
find /etc -maxdepth 1 -name passwd 查找此目录最多下一级目录的文件passwd
find /etc -maxdepth 2 -mindepth 2 -name *.conf查找/etc下最多两级且最少两极的目录的以.conf结尾的文件
测试:
find /home/work -size 20K 查找20K的文件
find /home/work -size -20K 查找小于20K的文件
find /mnt -size +20K 查找大于20K的文件
测试:在/home/work/下给file1 file2 写入不同大小,然后测试以上命令
dd if=/dev/zero of=/home/work/file1 bs=1 count=10240
dd if=/dev/zero of=/home/work/file1 bs=1 count=20480
运行结果:
[root@glkjdevapp work]# find /home/work -size +9k;
/home/work/VBM_ROM7.0.TEST.war
/home/work/file1
find -type 查找文件类型
find /home/work -type d 查找目录
find /home/work -type f 查找文件
运行结果:
[root@glkjdevapp work]# find /home/work -size +9k;
/home/work/VBM_ROM7.0.TEST.war
/home/work/file1
[root@glkjdevapp work]# find /home/work -type d
/home/work
[root@glkjdevapp work]# find /home/work -type f
/home/work/VBM_ROM7.0.TEST.war
/home/work/file1.txt
/home/work/file2.txt
/home/work/file1
find /home/work -cmin 10 查找整10分钟前操作的文件
find /home/work -cmin -10 查找10分钟内操作的文件
find /home/work -cmin +10 查找10分钟前操作的文件
find -perm
测试,创建文件:touch /home/work/file {1..5}
分配权限:
chmod 000 *
chmod 404 file1
chmod 444 file2
chmod 644 file3
chmod 640 file4
find /home/work/ -perm 444 查找权限为444的文件,所以查找到的文件是file2
[root@glkjdevapp work]# find /home/work/ -perm 444
/home/work/file2
find /home/work/ -perm -444 查找权限包括444的文件,因为444是r--r--r--,644是rw-r--r--,所以644包含444,所以查找到的文件是file2和file3.
[root@glkjdevapp work]# find /home/work/ -perm -444
/home/work/
/home/work/file2
/home/work/file3
find /home/work -perm /444 查找 o权限包括r或g权限包括r或o权限包括r的文件,即只要包含r即可,所以查找到的文件是file1 file2 file3 file4。
[root@glkjdevapp work]# find /home/work -perm /444
/home/work
/home/work/file1
/home/work/file2
/home/work/file3
/home/work/file4
find -exec command {} {}表示查找到的文件
例如:find /home/work -perm 444 -exec rm -rf {} \;整体这个命令的意思是,删除权限为444的文件
find /etc -name *.conf -exec cp -rp {} /home/work\;递归复制/etc下以.conf结尾的文件到/home/work下