基本概念
linux find命令是用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用find命令不设置任何参数,则find命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。find命令相对于locate这种非实时查找的搜索命令,大大增加了我们搜索的便捷度以及准确性;并且能够方便的帮助我们对大文件、特定类型的文件查找与删除,特别是有超多小碎文件的时候。
语法
find path -option [ -print ] [ -exec -ok command ] {} \;
规则
find语法规则:在命令列上第一个-()之前的部分为path,之后的部分为expression。
path为空则表示使用当前路径,expression为空表示使用-print为预设expression。
expression常用的选项如下:
- -mount, -xdev : 只检查和指定目录在同一个文件系统下的文件,避免列出其它文件系统中的文件。
- -amin n : 在过去 n 分钟内被读取过。
- -anewer file : 比文件 file 更晚被读取过的文件。
- -atime n : 在过去n天内被读取过的文件。
- -cmin 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:一般文件、I:符号连结、s:socket)
pid n:process id是n的文件
参数
根据属主、属组查找
-user username:查找属主是xx的文件
-group group:查找属组的xx文件
-uid useruid:查找uid号的文件
-gid groupid:查找gid号的文件
-nouser:查找没有属主的文件,即文件存在但是 user已被删除
-nogroup:查找没有属组的文件
根据文件类型查找
-type f:普通文件
-type d:目录文件
-type l:符号链接文件
-type s:套接字文件
-type b:块设备文件
-type c:字符设备文件
-type p:管道文件
根据大小查找
-size +10M :大于10m的文件
-size +10k:大于10k的文件
-size +1G:大于1G的文件
-size -1G:小于文件的文件
根据时间查找
一天为单位
-atime :访问时间
-mtime :修改时间
-ctime :改变时间
以分钟为单位:
-amin: 访问时间 -mmin:修改时间 -cmin:改变时间
组合条件查找
-a :与
-o :或
-not:非
! :非
处理动作
-print:打印到屏幕
-ls:查找到的文件 进行 ls
-delete:删除查找到的文件
-ok command {}\; 对查找的文件执行由command指定的命令,交互式
-exec command {}\;同上,非交互式
{}:代表前面find找到的 文件名称本身
例如:
find ./ -type f -exec cp {} {}.bak \; 将查找到的文件都复制出一个.bak文件
实例
列出当前目录下所有文件中后缀为.c的文件
# find . -name "*.c"
列出当前目录下其子目录中所有一般文件
# find . -type f
查找系统中所有文件长度为0的普通文件,并列出它们的完整路径
# find / -type f -size 0 -exec ls -l {} \;