find命令

来源:互联网 发布:淘宝最好的减肥产品 编辑:程序博客网 时间:2024/05/18 13:27

Find命令扩展:exec

Linux find命令用来在指定目录下查找文件任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。

语法

find   path   -option   [   -print]   [-exec   -ok   command ]   {};

 

参数说明 :

find 根据下列规则判断 path expression,在命令列上第一个 - ( ) , !之前的部份为 path,之后的是 expression。如果 path 是空字串则使用目前路径,如果 expression是空字串则使用 -print为预设 expression

expression 中可使用的选项有二三十个之多,在此只介绍最常用的部份

(一)  -mount,-xdev : 只检查和指定目录在同一个文件系统下的文件,避免列出其它文件系统中的文件

(二)  -amin n: 在过去 n 分钟内被读取过

(三)  -anewerfile : 比文件 file 更晚被读取过的文件

(四)  -atimen : 在过去 n 天过读取过的文件

(五)  -cmin n: 在过去 n 分钟内被修改过

(六)  -cnewerfile :比文件 file 更新的文件

(七)  -ctimen : 在过去 n 天过修改过的文件

(八)  -empty: 空的文件-gid n or -group name : gid 是 n 或是 group 名称是 name

(九)  -ipathp, -path p : 路径名称符合 p 的文件,ipath 会忽略大小写

(十)  -namename, -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 的文件

(二十)-print:假设find指令的回传值为Ture,就将文件或目录名称列出到标准输出。格式为每列一个名称,每个名称前皆有“./”字符串;

(二十一) -print0:假设find指令的回传值为Ture,就将文件或目录名称列出到标准输出。格式为全部的名称皆在同一行;

(二十二) -printf<输出格式>:假设find指令的回传值为Ture,就将文件或目录名称列出到标准输出。格式可以自行指定;

(二十三) -fprint<列表文件>:此参数的效果和指定“-print”参数类似,但会把结果保存成指定的列表文件;

(二十四) -regex<范本样式>:指定字符串作为寻找文件或目录的范本样式;

(二十五) -exec<执行指令>:假设find指令的回传值为True,就执行该指令;

(二十六) -fls<列表文件>:此参数的效果和指定“-ls”参数类似,但会把结果保存为指定的列表文件;

(二十七) -ls:假设find指令的回传值为Ture,就将文件或目录名称列出到标准输出;

(二十八) -ok<执行指令>:此参数的效果和指定“-exec”类似,但在执行指令之前会先询问用户,若回答“y”或“Y”,则放弃执行命令;

 

你可以使用 ( )将运算式分隔,并使用下列运算。

(一)exp1-and exp2

(二)! expr

(三)-notexpr

(四)exp1-or exp2

(五)exp1,exp2

(六)-a 和 -o 都是短路求值,与 shell 的 && 和 || 类似如果

 

暴炒栗子:

1)  列出当前目录及子目录下所有文件和文件夹

find .

2)  在 /home目录下查找以.txt结尾的文件名

find /home -name "*.txt"

3)  同上,但忽略大小写

find /home -iname "*.txt"

4)  当前目录及子目录下查找所有以.txt和.pdf结尾的文件

find . \( -name "*.txt" -o -name"*.pdf" \) 或 find . -name "*.txt" -o -name"*.pdf"

5)  匹配文件路径或者文件

find /usr/ -path "*local*"

6)  基于正则表达式匹配文件路径

find . -regex".*\(\.txt\|\.pdf\)$"

同上,但忽略大小写

find . -iregex".*\(\.txt\|\.pdf\)$"


否定参数

1)  找出/home下不是以.txt结尾的文件

find /home ! –name "*.txt"


2)  根据文件类型进行搜索

find . –type 类型参数

类型参数列表:

l   f 普通文件

l   l 符号连接

l   d 目录

l   c 字符设备

l   b 块设备

l   s 套接字

l   p Fifo


3)  基于目录深度搜索 向下最大深度限制为3

find . -maxdepth 3 -type f


4)  搜索出深度距离当前目录至少2个子目录的所有文件

find . -mindepth 2 -type f


5)  根据文件时间戳进行搜索

find . -type f 时间戳

UNIX/Linux文件系统每个文件都有三种时间戳:

l   访问时间(-atime/天,-amin/分钟):用户最近一次访问时间。

l   修改时间(-mtime/天,-mmin/分钟):文件最后一次修改时间。

l   变化时间(-ctime/天,-cmin/分钟):文件数据元(例如权限等)最后一次修改时间。

 

6)  搜索最近七天内被访问过的所有文件

find . -type f -atime -7

7)  搜索恰好在七天前被访问过的所有文件

find . -type f -atime 7

8)  搜索超过七天内被访问过的所有文件

find . -type f -atime +7

9)  搜索访问时间超过10分钟的所有文件

find . -type f -amin +10


10) 找出比file.log修改时间更长的所有文件

find . -type f –newer file.log

文件大小单元:

l   b —— 块(512字节)

l   c —— 字节 w —— 字(2字节)

l   k —— 千字节

l   M —— 兆字节

l   G —— 吉字节


11) 删除当前目录下所有.txt文件

find . -type f -name "*.txt"-delete


12) 搜索大于10KB的文件

find . -type f -size +10k

13) 搜索小于10KB的文件

find . -type f -size -10k

14) 搜索等于10KB的文件

find . -type f -size 10k

 

(一)查找/var/logs目录中更改时间在7日以前的普通文件,并在删除之前询问它们:

$ find /var/logs -type f -mtime +7-ok rm { } ;

(二)查找前目录中文件属主具有读、写权限,并且文件所属组的用户和其他用户具有读权限的文件:

$ find . -type f -perm 644 -exec ls-l { } ;

(三)为了查找系统中所有文件长度为0的普通文件,并列出它们的完整路径:

$ find / -type f -size 0 -exec ls-l { } ;

(四)查找/var/logs目录中更改时间在7日以前的普通文件,并在删除之前询问它们:

$ find /var/logs -type f -mtime +7-ok rm { } ;

原创粉丝点击