find

宝剑锋从磨砺出,梅花香自苦寒来。这篇文章主要讲述find相关的知识,希望能为你提供帮助。
[TOC]
【find】

文件查找命令 findday21 find选项

## 语法
find [路径] [选项][表达式][动作]
动作: -ls 查看详细属性
-delete 删除 都容易出bug

按文件类型查找 -type
## 选项
#1.按文件类型查找 -type
f:普通文件
d:目录
l:软链接
p:管道符
s:安全套接字文件
b:块设备文件
c:字符设备文件


find / -type f#查找 /下面的所有普通文件

按文件大小 -size(xargs)
+num:查找大于指定数大小文件
-num:查找小于指定数大小文件
num:查找指定数大小文件(不是很精准)
# 栗子
查找当前目录大于5k 小于10k的文件
04:21:05 root@miaosen,10.0.0.100:< sub> # find -size +5k -size -10k
./.viminfo
0 ? 04:21:13 root@miaosen,10.0.0.100:< /sub> # du -h .viminfo
8.0K.viminf

## xargs:读取输入数据重新格式化后输出()
默认分隔符是空格
# 选项
-nn:多行输出(第二个n代表阿拉伯数字)
0 ? 05:04:47 root@miaosen,10.0.0.100:< sub> # cat test1.txt|xargs -n2
1 2
3 4
5 6

-d:自定义以什么为分隔符
0 ? 05:08:10 root@miaosen,10.0.0.100:< /sub> # echo nameXnameXnameX | xargs-d X
name name name

-d -nn
0 ? 05:08:30 root@miaosen,10.0.0.100:< sub> # echo nameXnameXnameX | xargs-dX -n2
name name
name

-i:指定数据流的位置,将数据流放入中
# 查找当前目录下大于25k小于30k的文件并移动到/tmp下
0 ? 05:15:52 root@miaosen,10.0.0.100:< /sub> # find -type f -size +25k -size -30k |xargs -i mv/tmp
0 ? 05:16:14 root@miaosen,10.0.0.100:~ # ll
total 0

按文件名-size
-name:严格区分大小写
0 ? 04:27:38 root@miaosen,10.0.0.100:< sub> # find ./ -name sj
./sj

-iname:不区分大小写
0 ? 04:27:53 root@miaosen,10.0.0.100:< /sub> # find ./ -iname sj
./sj
./SJ

# *任意字符
# 查找不区分大小写sj并前面有任意字符的文件名
0 ? 04:28:08 root@miaosen,10.0.0.100:< sub> # find ./ -iname *sj
./sj
./SJ
# 查找不区分大小写sj并后面有任意字符的文件名
0 ? 04:28:50 root@miaosen,10.0.0.100:< /sub> # find ./ -iname sj*
./sj
./SJ
./SJ1.txt
# 查找不区分大小写sj并前后有任意字符的文件名
0 ? 04:28:58 root@miaosen,10.0.0.100:< sub> # find ./ -iname *sj*
./sj
./SJ
./SJ1.txt
./godSJ1.txt

# 满足其中一个条件 -o:or 或
0 ? 04:36:39 root@miaosen,10.0.0.100:< /sub> # find ./ -iname *sj -o -name *1.txt
./sj
./SJ
./SJ1.txt
./godSJ1.txt
./11SJl1.txt

### 两个条件都要满足名字带sj和尾巴有1.txt的文件
0 ? 04:43:33 root@miaosen,10.0.0.100:~ # find ./ -iname *sj*-name *1.txt
./SJ1.txt
./godSJ1.txt
./11SJl1.tx

按文件时间查找
-atime:文件访问时间查找
-mtimi:文件内容创建,修改时间查找
-ctime:文件属性,修改时间查找

num:查找第N天的文件(不包括今天)
+num:查找第n天之前的所有文件(不包括今天)
-num:查找从今天开始算n天文件

## 一个文件有以下三种时间
# 查看方法 stat 文件名
access time:atime
modify time:mtime
change time:ctime

# 查看三种时间
0 ? 05:22:23 root@miaosen,10.0.0.100:~ # stat /tmp/test1.txt
File: ‘/tmp/test1.txt’
Size: 25798Blocks: 56IO Block: 4096regular file
Device: 803h/2051dInode: 33574982Links: 1
Access: (0644/-rw-r--r--)Uid: (0/root)Gid: (0/root)
Access: 2022-04-18 05:15:01.747729323 +0800
Modify: 2022-04-18 05:15:01.748729323 +0800
Change: 2022-04-18 05:16:14.502724735 +0800
Birth: -


按照文件用户和组查找
-user:查找文件的属主
-nouser:文件没有属主用户的


-group:查找文件的属组
-nogroup:文件没有属组的

多条件组合查找
# 查找/tmp/下的普通文件名字不区分大小写带test文件大小大于1k查找从今天开始到第二天的所有文件
0 ? 05:48:01 root@miaosen,10.0.0.100:~ # find /tmp/ -type f -iname *test* -size +1k -mtime -2
/tmp/test1.txt

day22 find按权限查找
-perm
## 权限精确查找
0 ? 05:54:43 root@miaosen,10.0.0.100:< sub> # ll
total 0
drwxr-xr-x 2 root root 6 Apr 18 05:54 123
-rw-r--r-- 1 root root 0 Apr 18 05:54 31
--w--w--w- 1 root root 0 Apr 18 05:54 sj
0 ? 05:54:43 root@miaosen,10.0.0.100:< /sub> # find-perm 222
./sj

## -权限
# 每个权限位上,都要包含该数字权限的所有权限
0 ? 06:01:57 root@miaosen,10.0.0.100:< sub> # find-perm -700 |xargs ls -ld
drwxr-xr-x 2 root root 6 Apr 18 05:54 ./123
0 ? 06:01:59 root@miaosen,10.0.0.100:< /sub> # find-perm -755 |xargs ls -ld
drwxr-xr-x 2 root root 6 Apr 18 05:54 ./123
0 ? 06:02:56 root@miaosen,10.0.0.100:< sub> # find-perm -777 |xargs ls -ld
dr-xr-x---. 3 root root 175 Apr 18 05:54 .
0 ? 06:03:04 root@miaosen,10.0.0.100:< /sub> # find-perm -744 |xargs ls -ld
drwxr-xr-x 2 root root 6 Apr 18 05:54 ./123
0 ? 06:03:36 root@miaosen,10.0.0.100:< sub> # find-perm -711 |xargs ls -ld
drwxr-xr-x 2 root root 6 Apr 18 05:54 ./123

## /权限
# 总共三个权限位,只要有一个权限位的权限被包含,就可以找到
0 ? 06:08:48 root@miaosen,10.0.0.100:< /sub> # find -perm /644
属主权限位,有一个r或者有一个w就满足条件
属组权限位,有一个r就满足条件
其他用户权限位,有一个r就满足条件

按深度查找
-maxdepth
针对目录层级查找
# 查找/etc/目录下的所有一级和二级目录
0 ? 06:13:09 root@miaosen,10.0.0.100:~ # find /etc/ -type d -maxdepth 2

find动作
-print:打印查找到的内容到终端上(find命令默认就是打印结果-print)

-ls:查看文件的详细信息|xargs ls-l或者ls-l$(find xxx)或者ls-l`find xxx`

-delete:删除查找到的文件(bug跟ls,ls看不见的,也删除不掉)并且只能删除空目录
其他删除方法:|xargs rm-fr或者rm-fr$(find xxx)或者rm-fr`find xxx`

-ok:找到文件后,执行后面的bash命令,询问是否要操作 # 语法:-ok 系统命令\\;
130 ? 06:19:03 root@miaosen,10.0.0.100:< sub> # find -type f -ok cp/tmp \\;
< cp ... ./.bash_logout > ? y
< cp ... ./.cshrc > ? n
< cp ... ./.tcshrc > ? n
< cp ... ./.bash_history > ? n
< cp ... ./.lesshst > ? n
< cp ... ./.bashrc > ? n
< cp ... ./.bash_profile > ? n
< cp ... ./.viminfo > ? n
< cp ... ./31 > ? n
< cp ... ./sj > ?

-exec:找到文件后,执行后面的bash命令
# 语法:-exec 系统命令\\;
130 ? 06:22:08 root@miaosen,10.0.0.100:< /sub> # find -type f-exec cp/tmp \\;

find多条件
-a:和,并且(默认)
-o:或者
!:取反


    推荐阅读