day06(find命令 name/size/type)

一: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 -10003)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: -

2find查询时间的参数

-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

原文地址:https://www.cnblogs.com/dayday-up-a/p/14509058.html