find命令:
1.常用执行方式:
find start-dir expreesion
解释:
起始目录:指定find开始查找的目录,默认条件下,find会递归的查找指定目录下的所有子目录和文件;
表达式:表达式通常由 选项、条件测试、动作三部分组成(三者都是可选的),
如下面的命令中:
$find ./project -depth -name '*.cpp' -exec cat {} > cppfile \;
-depth是选项, -name '*.cpp' 是条件测试, -exec cat {} > cppfile \;是动作
2.find表达式:
2.1表达式常用选项:
-d、-depth:先找目录下的内容,然后是目录本身
-maxdepth : 从指定目录最多往下找n层
-mindepth <n>:从指定的目录至少往下找n层
-prune:防止进入符合某个条件的目录
-xdev、-mount:不要进入其它文件系统查找
2.2find常用的条件表达式:
2.2.1按文件名查找:
-name pattern、-iname pattern:按指定的文件样式查找,-iname指不区分大小写
#在当前目录查找以文件名sql结尾的文件
$find . -name '*sql'
#在/tmp /opt目录下查找以文件名为sock结尾的文件
$find /tmp /opt -name '*sock'
2.2.2按文件类型查找:
-type filetype : 如
#查找/var 下的socket文件
$find /tmp -type s -ls
2.2.3按时间查找:
说明:
数字n: n正好等于n, -n小于n, +n大于n
a 访问时间、c 状态改变时间、 m修改时间
-atime、 -ctime、 -mtime:单位为日
-amin、 -cmin、 -mmin:单位为分钟
-anewer file、 -cnewer file、 -newer file:时间比文件file新
#查找最近50分钟内修改的文件
$ find . -mmin -50
#查找状态更改时间大于48小时的文件
$ find . -ctime +2
#查找比samp.sh文件新的文件
$ find . -newer samp.sh
2.2.4按文件大小查找
文件的大小单位:
b:以512bytes为单位的块
c:字节
w:双字节字符数
k:1024bytes
M:1024*1024 bytes
G:1024 * 1024 * 1024 bytes
示例:
#查找文件尺寸大于1024k的文件
$find . -size +2014k
#查找文件尺寸小于2048 blocks的文件
$ find . -size -2048
#查找空文件
$ find . -size 0 #或 find . -empty
2.2.5按权限查询
说明:
权限匹配规则:以220为例:
220:文件权限必须为220
-220:文件权限最小为220, 如550,755都匹配
/220:符合u,g,o三个权限中的任意一个都匹配, 200, 020等都会匹配, 但不匹配220
数字形式与符号形式的权限表示:
如:220->u+w, g+w
示例:
#以下3条命令一致, 查找所有者或组有写权限的文件
$ find . -perm /220
$ find . -perm /u+x, g+x
$ find . /perm /u=x, g=w
2.2.6按用户或组查询
说明:
可以使用户名, 组名或用户id、组id
查无主的文件:nouser、nogroup
查找可读或可写或可执行的文件:
readable、writable、executable
示例:
#查找/tmp 下属于用户ppp的文件
$ find /tmp -user ppp
$ find /tmp -uid 1000
#查找/tmp 下属于用户ppp, 且属于aaa的文件
$ find /tmp -user ppp -group aaa
#查找当前/opt 下的无主文件
$ find /opt -nouser -o -nogroup # -o is or
#查找当前目录下的可读文件
$ find . -readable
2.2.7表达式常见的动作:
-print: 打印查找的结果
-ls:相当于ls -l
-exec command: 执行命令
-ok command:同 -exec, 但开启交互模式
-delete:删除查找的文件
示例:
#查找当前目录下所有后缀名为sql的文件,将其复制到f2目录下
$ find . -name '*sql' -exec cp {} ./f2 \;
#查找/opt下的无主文件,将其删除
$ find /opt -nouser -o -nogroup -ok rm -rf {} \;
#查找当期目录下所有后缀名为sql的文件,并执行ls -l
$ find . -name '*.sql' -ls
3.配合xargs命令
args命令:xargs通过管道,将前面的命令的输出组装成后一个命令的参数,如:
#将ls命令的输出,作为echo命令的参数
$ ls *.sql | xargs echo
结合find 与xargs的示例:
# 将当前目录下所有后缀名为cpp 的文件,打包
$ find . name '*.cpp' 2>/dev/null | xargs tar cf sql.tar 2>/dev/null
# 相同效果的另外一些做法,见“Shell 语法”单元
$ tar cf sql.tar `find . name '*.sql' 2>/dev/null` 2>/dev/null
$ tar cf sql.tar $(find . name '*.sql' 2>/dev/null) 2>/dev/null
阅读(1549) | 评论(0) | 转发(0) |