一:find名称查找
单一查找某个文件的位置,可以用 which 文件名(不需要引号)
[root@local-work ~]# which ifconfig
/usr/sbin/ifconfig
在目录层级结构中搜索文件;find命令可以根据名称,属性,创建时间,大小,所属用户等方式查找文件。格式:
find 搜索路径 参数 参数相关匹配值 指令(-print) #指令默认不用写
1.find名称查找格式 find -name
格式: find 搜索路径 -name 参数相关匹配值 指令(-print) find /test -name '2.txt' 结果是路径:/test/t1/t2/2.txt
2.通配符 *
* 匹配所有 例子: (1)以.txt结尾的,以*代替前面,或者可以放在结尾寻找前面知道的 [root@local-work test]# find /test -name '*.txt' /test/t1/t2/3.txt /test/t1/t2/2.txt (2)包含某些字符的 find /test -name *.txt*
二:find名称查找中括号的用法 [ ]
[ ] 匹配中括号中的任意一个字符
find /root/ -name '[1,3,5]abc'
find /root/ -name '[135]abc'
结果: /root/1abc /root/3abc /root/5abc
三:find名称查找中括号取反(只对中括号内的取反)
^(shift+6打出来) :匹配去掉中括号内的内容之外的跟前面或者后面匹配上的文件,对名称表达式取反
例子:查找/root 下有abc的且除了1,3,5abc [root@local-work /]# find /root -name '[^135]abc'
/root/2abc /root/4abc /root/6abc /root/7abc /root/8abc /root/9abc 其中: [root@local-work /]# find /root -name 'abc[135^]' 都是错误的 [root@local-work /]# find /root -name 'abc[^135]' 都是错误的
四:find结果集取反
! 对整个查找结果取反
find /root ! -name '[123]abc' # !加在查找的路径后面,是对整个find的结果然后取反,而^是对中括号内的结果取反的
五:find匹配任意一个字符
(1)* 匹配任意的所有的字符,不管匹配字符前面或者后面是什么,都匹配出来
[root@local-work /]# find /root -name '*abc' /root/1abc /root/2abc /root/3abc /root/4abc /root/5abc /root/6abc /root/7abc /root/8abc /root/9abc
(2)? 只匹配一个字符的文件或者内容,其他的(字符为0个或者大于1个的)不匹配
例子: [root@local-work /]# touch /root {10..20}abc [root@local-work /]# find /root -name '?abc' /root/1abc /root/2abc /root/3abc /root/4abc /root/5abc /root/6abc /root/7abc /root/8abc /root/9abc #结果只显示abc前面是一个字符的内容
六: -i 忽略大小写查找
[root@local-work ~]# touch /root {1..9}Abc #在家目录下创建1~9Abc
[root@local-work ~]# find /root -iname '*abc'
# 忽略大小写,把后面是abc的前面是所有的,abc不区分大小写
七:按照文件体积大小查找
ls -lh 查找文件以长列表形式,并显示文件的大小(显示多少k等)
./ 当前的目录(点+斜杠)
根据文件大小查找,默认后面跟c(字节),格式是:
find 需要查询的路径 -size 参数(n) #参数n必须为整型int (1)+n [root@local-work ~]# find /root/ -size +1k (2)-n [root@local-work ~]# find /root -size -1000 (3)n [root@local-work ~]# find /root -size 1 #不精确(find会自动四舍五入,但是不是真的四舍五入,比如2.1就是3,2.5也是3)
(4)参数补充
-a 并且(and)
例子:
[root@local-work ~]# find /var/log/ -size +10k -a -size -20k
find会同时打印隐藏的文件
但是 -a可以省略,在输入的时候可以不尽兴输入,也可以达到这个结果
[root@local-work ~]# find /var/log/ -size +10k -size -20k
-o 或者(or)
例子:
查找大小小于10k或者大于20k的文件
[root@local-work ~]# find /var/log/ -size -10k -o -size +20k
-o不可以省略
八:按照时间来查找
按照文件的创建时间,修改时间,访问时间,进行筛选
(1)查找已知文件的相关时间
[root@local-work ~]# stat test.txt
File: ‘test.txt’
Size: 1017 Blocks: 8 IO Block: 4096 regular file
Device: fd00h/64768d Inode: 33786023 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2021-03-08 21:16:14.982729843 +0800
Modify: 2021-03-08 21:16:14.982729843 +0800
Change: 2021-03-08 21:16:14.982729843 +0800
Birth: -
(2)find查询时间的参数
-ctime :根据文件变更时间进行查找时间进行查找 -mtime:根据文件修改的天数来查找 vim -atime:根据访问时间查找 cat 格式:find 路径 -time 数字 注意事项:数字必须为整型,+3是代表查询今天算三天前的所有文件,-3是三天内的所有,3则是刚好3天的 例子: find /var/log/ -mtime 3
九:按照文件类型查找 type
1.文件类型
f(-):普通文件
d :目录文件
l :链接文件(快捷方式)
b :设备文件
c :设备文件
s :套接字文件
p :管道文件
2.按类型查找文件 -type
./ 也就是/root/
格式: find 路径 -type 文件类型 [root@local-work ~]# find ./ -type d -ls 结果是: 33574977 4 dr-xr-x--- 3 root root 4096 Mar 11 20:08 ./ 51314599 0 drwxr----- 3 root root 19 Mar 4 06:02 ./.pki 1003 0 drwxr----- 2 root root 6 Mar 4 06:02 ./.pki/nssdb 备注: ./ 就是/root ,d是目录文件
普通文件-,就使用f表示
例题:查找普通文件中创建时间在三天以内的
find ./ -type f -a -ctime -3
十:find指令集
1. -print打印结果集
find ./ -type s -ctime -3 -print
2. -ls打印结果集详情
find ./ -type s -ctime -3 -ls
3. -delete 删除结果集
删除./中的名字中只有一个数字的文件 [root@local-work ~]# find ./ -name '?abc' -delete
4. -exec 对结果集进行下一步的处理
格式: find 路径 参数 参数表达式 -exec 结果集的命令 {} ; 例子:查找./中按照名字查找不区分大小写,abc前面只有一个数字的;然后查询出来 [root@local-work ~]# find ./ -iname '?abc' -exec ls {} ; 备注: -exec 是固定的格式 {} 是exec把前面的结果集放在这里了 和; 都是固定的格式
5. -ok 对结果集进行下一步的处理(交互式:需要进行确认才可以)
格式: find 路径 参数 参数表达式 -ok 操作ok的命令 {}; 例子: [root@local-work ~]# find ./ -name 'test.txt' -ok rm {} ;
十一:find和xargs命令
1.管道符号 |
作用是:把前面结果的命令交给后面来处理
2.find和xargs命令
格式: find 路径 参数 参数表达式 | xargs ....(其他命令做处理) 例子: find ./test/ -type f | xargs -I {} ls -l {}
习题总结:
查询/root中的目录文件 复制到/tmp [root@local-work ~]# find /root/ -type d -exec cp -rfv {} /tmp ; 备注: r递归复制,f不提示(免交互),v显示过程
取消正在输入的命令,删除掉
crl+c
ctrl+u