在目录层次结构中搜索文件。find命令可以根据名称、属性、创建时间、大小、所属用户等方式查找文件。
格式:find 搜索路径 参数 参数相关匹配值 指令(-print)
ls -lhi
#选项
-type #根据文件类型进行查找
f #普通文件
d #目录
l #软连接文件
s #sockt文件 套接字文件
我记得,Linux系统中有一个文件叫redhat-release,我怎查找到它的位置。
[root@localhost ~]# find / -name "redhat-release"
/etc/redhat-release
/usr/share/doc/redhat-release
/usr/share/redhat-release
-name “文件名称” 基于名称的精确查找
-iname 基于名称忽略大小写的精确查找
[root@localhost ~]# find /root/ -iname "abc*"
/root/abc1
/root/abc2
/root/abc3
/root/abc4
/root/abc5
/root/abc6
/root/Abc1
/root/Abc2
/root/Abc3
/root/Abc4
/root/Abc5
/root/Abc6
/root/Abc7
/root/Abc8
/root/Abc9
通配符
*:匹配所有(可以匹配空字符)
[root@localhost ~]# find /etc/ -name "ifcfg-*"
/etc/sysconfig/network-scripts/ifcfg-lo
/etc/sysconfig/network-scripts/ifcfg-eth0
/etc/sysconfig/network-scripts/ifcfg-eth1
# 查询以eth0开头的文件
[root@localhost ~]# find / -name "eth0*"
/root/eth0xxx
# 查询以eth0结尾的文件
[root@localhost ~]# find / -name "*eth0"
/etc/sysconfig/network-scripts/ifcfg-eth0
/root/xxxeth0
# 查询文件名称包含eth0的文件
[root@localhost ~]# find / -name "*eth0*"
/etc/sysconfig/network-scripts/ifcfg-eth0
/root/eth0xxx
/root/xxxeth0
/root/xxxeth0xxx
[] : 匹配中括号中的任意一个字符
[root@localhost ~]# touch abc{1..9}
[root@localhost ~]# find /root/ -name "abc[359]"
/root/abc3
/root/abc5
/root/abc9
[root@localhost ~]# find /root/ -name "oldboy[tsdgh]"
/root/oldboyd
/root/oldboyg
/root/oldboyh
/root/oldboys
/root/oldboyt
[^] : 匹配除掉中括号中的内容之外的跟前面匹配的上的所有文件
[root@localhost ~]# find /root/ -name "abc[^359]"
/root/abc1
/root/abc2
/root/abc4
/root/abc6
/root/abc7
/root/abc8
[root@localhost ~]# ls
abc1 abc8 oldboyc oldboyj oldboyq oldboyx
abc2 abc9 oldboyd oldboyk oldboyr oldboyy
abc3 anaconda-ks.cfg oldboye oldboyl oldboys oldboyz
abc4 dir oldboyf oldboym oldboyt xxxeth0
abc5 eth0xxx oldboyg oldboyn oldboyu xxxeth0xxx
abc6 oldboya oldboyh oldboyo oldboyv 系统优化.md
abc7 oldboyb oldboyi oldboyp oldboyw
! : 对整个搜索结果进行取反
[root@localhost ~]# find /root/ -name "abc[^359]"
/root/abc1
/root/abc2
/root/abc4
/root/abc6
/root/abc7
/root/abc8
[root@localhost ~]# find /root/ -name "abc[359]"
/root/abc3
/root/abc5
/root/abc9
[root@localhost ~]# find /root/ ! -name "abc[359]"
/root/
/root/.bash_logout
/root/.bash_profile
/root/.bashrc
/root/.cshrc
/root/.tcshrc
/root/anaconda-ks.cfg
/root/.bash_history
?:匹配任意一个字符(该字符不能为空)
[root@localhost ~]# find /root/ -name "abc*"
/root/abc1
/root/abc2
/root/abc3
/root/abc4
/root/abc5
/root/abc6
/root/abc7
/root/abc8
/root/abc9
/root/abc10
/root/abc11
/root/abc12
/root/abc13
/root/abc14
/root/abc15
/root/abc16
/root/abc17
/root/abc18
/root/abc19
/root/abc20
[root@localhost ~]# find /root/ -name "abc?"
/root/abc1
/root/abc2
/root/abc3
/root/abc4
/root/abc5
/root/abc6
/root/abc7
/root/abc8
/root/abc9
[root@localhost ~]#
根据文件的体积查询出我们所需要的文件,find会自动四舍五入
-a :并且(默认使用-a)
[root@localhost ~]# find /var/log -size +2k -size -10k
/var/log
/var/log/secure
/var/log/vmware-vgauthsvc.log.0
/var/log/vmware-vmsvc.log
/var/log/cron
/var/log/vmware-network.3.log
[root@localhost ~]# find /var/log -size +2k -a -size -10k
/var/log
/var/log/secure
/var/log/vmware-vgauthsvc.log.0
/var/log/vmware-vmsvc.log
/var/log/cron
/var/log/vmware-network.3.log
-o : 或者
[root@localhost ~]# find /var/log -size -2k -o -size +10k
/var/log/tallylog
/var/log/grubby_prune_debug
/var/log/lastlog
/var/log/wtmp
/var/log/btmp
-size
# b(默认) c w K M G
-size n (单位)
+n : 大于n个单位
-n : 小于n个单位
n : 等于n个单位
# 注:find查找同时打印出隐藏文件
# 注:n必须是整数,不能是小数
[root@localhost log]# find /root/ -size 8.8k
find: Invalid argument `8.8k‘ to -size
+n : 大于n个单位的文件
[root@localhost ~]# find /root/ -size +1k
/root/anaconda-ks.cfg
/root/系统优化.md
/root/123.log
-n : 小于n个单位的文件
[root@localhost ~]# find /root/ -size -1k
/root/eth0xxx
/root/xxxeth0
/root/xxxeth0xxx
n : 等于n个单位的文件但是不精确
[root@localhost ~]# ls -lh
total 640K
-rw-r--r-- 1 root root 632K Mar 9 10:31 123.log
-rw-------. 1 root root 1.8K Mar 3 10:51 anaconda-ks.cfg
drwxr-xr-x. 3 root root 17 Mar 4 10:51 dir
-rw-r--r-- 1 root root 0 Mar 9 09:28 eth0xxx
-rw-r--r-- 1 root root 0 Mar 9 09:28 xxxeth0
-rw-r--r-- 1 root root 0 Mar 9 09:28 xxxeth0xxx
-rw-r--r--. 1 root root 2.3K Mar 4 10:46 系统优化.md
[root@localhost ~]# find /root/ -size 2k -ls
33574978 4 -rw------- 1 root root 1757 Mar 3 10:51 /root/anaconda-ks.cfg
c : 字节
[root@localhost log]# find /var/log -size 674c
/var/log/vmware-network.5.log
/var/log/vmware-network.4.log
/var/log/vmware-network.2.log
[root@localhost log]# find /var/log/ -size -300c -ls
33771984 0 -rw------- 1 root root 0 Mar 3 10:45 /var/log/tallylog
33852252 0 -rw------- 1 root utmp 0 Mar 4 10:38 /var/log/btmp
34126340 0 -rw------- 1 root root 0 Mar 3 10:47 /var/log/spooler
34126393 0 drwxr-xr-x 2 root root 23 Feb 3 00:30 /var/log/tuned
17662708 0 drwx------ 2 root root 23 Aug 8 2019 /var/log/audit
51428521 0 drwxr-xr-x 2 root root 176 Mar 3 10:51 /var/log/anaconda
51428529 0 -rw------- 1 root root 0 Mar 3 10:51 /var/log/anaconda/ks-script-NeF0lj.log
70 0 drwxr-xr-x 2 root root 6 Mar 3 10:51 /var/log/rhsm
33574980 0 -rw------- 1 root root 0 Mar 9 10:28 /var/log/boot.log
33574994 4 -rw-r----- 1 root root 253 Mar 4 10:41 /var/log/firewalld
按照文件的创建时间、修改时间以及访问时间进行筛选查找。
-ctime: 文件变更时间(修改了位置(mv)、所属组、所属用户)
[root@localhost test]# for i in 1 2 3 4 5 6 7 8 9;do date -s "2021-03-0$i 11:30:30";touch 2021-03-0$i.txt; done && ntpdate ntp.aliyun.com
[root@localhost test]#
[root@localhost test]# # 1、查询文件变更时间在3天以前
[root@localhost test]# # 2、查询文件变更时间在3天以内
[root@localhost test]# # 3、查询文件变更时间在3天这个时候的
[root@localhost test]#
[root@localhost test]#
[root@localhost test]# find ./ -ctime +3
./2021-03-01.txt
./2021-03-02.txt
./2021-03-03.txt
./2021-03-04.txt
./2021-03-05.txt
[root@localhost test]# find ./ -ctime -3
./
./2021-03-07.txt
./2021-03-08.txt
./2021-03-09.txt
[root@localhost test]# find ./ -ctime 3
./2021-03-06.txt
[root@localhost test]#
[root@localhost test]# mkdir backup
[root@localhost test]# mv 2021-03-01.txt backup/
[root@localhost test]# stat backup/2021-03-01.txt
File: ‘backup/2021-03-01.txt’
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: fd00h/64768d Inode: 17307574 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2021-03-01 11:30:30.000000000 +0800
Modify: 2021-03-01 11:30:30.000000000 +0800
Change: 2021-03-09 11:58:06.369682903 +0800
Birth: -
[root@localhost test]# find ./ -ctime ^C
[root@localhost test]# mv 2021-03-01.txt backup/^C
[root@localhost test]#
[root@localhost test]#
[root@localhost test]# find ./ -ctime -3
./
./2021-03-07.txt
./2021-03-08.txt
./2021-03-09.txt
./backup
./backup/2021-03-01.txt
[root@localhost test]#
atime : 访问时间(cat)
[root@localhost test]# rm -rf ./* && for i in 1 2 3 4 5 6 7 8 9;do date -s "2021-03-0$i 11:30:30";touch 2021-03-0$i.txt; done
Mon Mar 1 11:30:30 CST 2021
Tue Mar 2 11:30:30 CST 2021
Wed Mar 3 11:30:30 CST 2021
Thu Mar 4 11:30:30 CST 2021
Fri Mar 5 11:30:30 CST 2021
Sat Mar 6 11:30:30 CST 2021
Sun Mar 7 11:30:30 CST 2021
Mon Mar 8 11:30:30 CST 2021
Tue Mar 9 11:30:30 CST 2021
[root@localhost test]# ntpdate ntp.aliyun.com
9 Mar 12:03:08 ntpdate[22696]: step time server 203.107.6.88 offset 1938.313235 sec
[root@localhost test]#
[root@localhost test]#
[root@localhost test]#
[root@localhost test]#
[root@localhost test]#
[root@localhost test]#
[root@localhost test]#
[root@localhost test]# find ./ -atime +3
./2021-03-01.txt
./2021-03-02.txt
./2021-03-03.txt
./2021-03-04.txt
./2021-03-05.txt
[root@localhost test]# find ./ -atime -3
./
./2021-03-07.txt
./2021-03-08.txt
./2021-03-09.txt
[root@localhost test]# find ./ -atime 3
./2021-03-06.txt
[root@localhost test]# cat 2021-03-03.txt
[root@localhost test]# find ./ -atime +3
./2021-03-01.txt
./2021-03-02.txt
./2021-03-04.txt
./2021-03-05.txt
[root@localhost test]# find ./ -atime -3
./
./2021-03-03.txt
./2021-03-07.txt
./2021-03-08.txt
./2021-03-09.txt
[root@localhost test]# stat 2021-03-03.txt
File: ‘2021-03-03.txt’
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: fd00h/64768d Inode: 17307576 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2021-03-09 12:03:59.906083902 +0800
Modify: 2021-03-03 11:30:30.000000000 +0800
Change: 2021-03-03 11:30:30.000000000 +0800
Birth: -
[root@localhost test]#
-mtime: 内容修改时间(包含创建时间)
# 正好3天前,这一天创建的文件
[root@localhost test]# find /root/test/ -mtime 3
/root/test/2021-03-06.txt
# 正好3天以内,创建的文件
[root@localhost test]# find /root/test/ -mtime -3
/root/test/
/root/test/2021-03-07.txt
/root/test/2021-03-08.txt
# 正好3天以前创建的文件
[root@localhost test]# find /root/test/ -mtime +3
/root/test/
/root/test/2021-03-05.txt
/root/test/2021-03-04.txt
[root@localhost test]#
#练习题
1、find的格式
find 路径 参数 参数相关匹配值 指令
2、查询系统中文件名为:resolv.conf
[root@test1 ~]# find / -name "resolv.conf"
3、查询系统中大于1个G的文件
[root@test1 ~]# find / -size +1G
4、查询系统中文件名包含sys的文件
[root@test1 ~]# find / -name "*sys*"
5、查询大于1k小于10k, 同时创建时间在1天以外的文件
find / -size +1k -a -size -10k -a -mtime +1
6、查询/root目录下的,大于1k小于10k的文件并删除
rm -rfv $(find /root/ -size +1k -a -size -10k)
7、查询/root目录下的,大于0小于100的文件并移动到/opt目录
mv $(find /root/ -size +0 -size -100) /opt/
8、查找/var目录下属主为root,且属组为mail的所有文件
find /var -user root -a -group mail
9、查找/var目录下最近一周内其内容修改过,同时属主不为root
find /var/ -ctime -7 -a ! -user root
10、查找当前系统上没有属主或属组,且最近一个周内曾被访问过的文件
find / -nouser -nogroup -atime -8
11、查找/etc目录下大于1M且类型为普通文件的所有文件
find /etc/ -size +1M
原文:https://www.cnblogs.com/zhaokunhao/p/14506459.html