day14---Linux文件查找之find

文件查找find

1.为什么要有文件查找

资料很多忘记放哪,需要通过查找的方式进行搜索

2.Windows如何查找文件

 计算机--.搜索框

3.Linux如何实现文件查找

  1.没有图形工具
  2.使用命令工具--->find

find命令查找语法?

命令路径选项表达式动作
find[path][options][expression][action]
查找地区妹纸18-25岁???

5. find针对文件名称,类型,大小,修改时间等方式进行查找

1)按照名称查找

1. 按名称查找 -name

[root@oldboy--day01 ~]# find ./ -name "*eth0"

2.按文件名称查找(不区分大小写)

[root@oldboy--day01 ~]# find ./ -iname "*eth0"
2)按文件大小查找-size

1.查找/etc/目录下大于5M的文件

[root@oldboy--day01 ~]# find /etc/ -size +5M
/etc/udev/hwdb.bin

2.查找/etc/目录下小于5M的文件

[root@oldboy--day01 ~]# find /etc/ -size -5M

3.查找/etc/目录中等于5M的文件

[root@oldboy--day01 ~]# find /etc/ -size 5M
3)按文件类型查找-type

  - f     #文件
  - d     #目录
  - s     #socket套接字文件
  - l     #链接文件
  - c     #字符设备
  - b     #块设备

1.查找当前目录下类型是文件的,并且名称跟eth0相关的都列出来

[root@oldboy--day01 ~]# find ./ -type f -iname "*eth0"|xargs ls -l

2.查找/etc/目录下类型是文件的,大小是大于5M,名称以.bin结尾的

[root@oldboy--day01 ~]# find /etc/ -type  f -size  +5M -name "*.bin"
/etc/udev/hwdb.bin

3.查找/etc/目录下类型是文件的,名称是.repo结尾的

[root@oldboy--day01 ~]# find /etc/ -type f -name  "*.repo"
/etc/yum.repos.d/CentOS-Base.repo
/etc/yum.repos.d/CentOS-CR.repo
/etc/yum.repos.d/CentOS-Debuginfo.repo
/etc/yum.repos.d/CentOS-Media.repo
/etc/yum.repos.d/CentOS-Sources.repo
/etc/yum.repos.d/CentOS-Vault.repo
/etc/yum.repos.d/CentOS-fasttrack.repo
/etc/yum.repos.d/epel.repo

4.查找/dev/下的类型是块设备的,并名称是以sda开头

[root@oldboy--day01 ~]# find /dev/ -type  b -name "sda*"|xargs ls -l
brw-rw---- 1 root disk 8, 0 Aug 12 18:01 /dev/sda
brw-rw---- 1 root disk 8, 1 Aug 12 18:01 /dev/sda1
brw-rw---- 1 root disk 8, 2 Aug 12 18:01 /dev/sda2
brw-rw---- 1 root disk 8, 3 Aug 12 18:01 /dev/sda3

5.查找/dev/下的类型是字符设备并名称是tty开头的

[root@oldboy--day01 ~]# find /dev/ -type c -name "tty*"
4.按时间进行查找-mtime

示例:[root@oldboy--day01 ~]# for i in {1..31}; do date -s "2019/08/$i" ; done
分别为8月份的每一天创建一份文件

1.查找第七天的文件

[root@oldboy--day01 ~]# find ./ -type  f -mtime 7
./file-24

2.7天以前的内容都会被筛选出来

[root@oldboy--day01 ~]# find ./ -type  f -mtime -7 -name "file-*"
./file-29
./file-31
./file-25
./file-26
./file-27
./file-28
./file-30

5.本地文件保留最近7天的备份文件,备份服务器3个月的备份文件

[root@oldboy--day01 ~]# find /backup/ -iname "*.bak" -mtime +7 -delete
[root@oldboy--day01 ~]# find /backup/ -iname "*.bak" -mtime +180 -delete
5. 按用户和组进行查找 -user - group -Nouser -nogroup

1.查找属主是Jack

[root@oldboy--day01 ~]# find /home -user jacky
/home/jack
/home/jack/.bash_logout
/home/jack/.bash_profile
/home/jack/.bashrc
/home/jack/.bash_history
/home/jack/.viminfo

2.查找属主是Jack,属组是Jack的目录

[root@oldboy--day01 ~]# find /home  -type d -user jacky -group jack
/home/jack

3.查找没有属主的文件

[root@oldboy--day01 ~]# find /home/ -nouser
/home/ltx
/home/ltx/.bash_logout
/home/ltx/.bash_profile
/home/ltx/.bashrc
/home/linux
/home/linux/.bash_logout
/home/linux/.bash_profile
/home/linux/.bashrc
/home/Hmt
/home/Hmt/.bash_logout
/home/Hmt/.bash_profile
/home/Hmt/.bashrc
/home/LTC
/home/LTC/.bash_logout
/home/LTC/.bash_profile
/home/LTC/.bashrc

4.查找没有属组的文件

[root@oldboy--day01 ~]# find /home/ -nogroup
/home/ltx
/home/ltx/.bash_logout
/home/ltx/.bash_profile
/home/ltx/.bashrc
/home/linux
/home/linux/.bash_logout
/home/linux/.bash_profile
/home/linux/.bashrc
/home/LTC
/home/LTC/.bash_logout
/home/LTC/.bash_profile
/home/LTC/.bashrc

5.查找没有属主或属组的文件

[root@oldboy--day01 ~]# find /home/ -nogroup -nouser
/home/ltx
/home/ltx/.bash_logout
/home/ltx/.bash_profile
/home/ltx/.bashrc
/home/linux
/home/linux/.bash_logout
/home/linux/.bash_profile
/home/linux/.bashrc
/home/LTC
/home/LTC/.bash_logout
/home/LTC/.bash_profile
/home/LTC/.bashrc
6.find查找后的动作处理

查找到一个文件后,需要对文件进行如何处理,find的默认动作是-print

动作含义
-print打印查找到的内容(默认)
-ls长格式显示打印查找的内容
-delete删除文件和空目录
-ok执行command命令,但有提示
-exec执行command命令(标准写法 -exec ;)

1. 查找当前目录下以file开头的普通文件,并删除
方法一:

[root@oldboy--day01 ~]# time find ./ -type f -name "file*" -exec rm -f {} \;
real    0m0.011s
user    0m0.005s
sys 0m0.007s

方法二:

[root@oldboy--day01 ~]# time find ./ -type f -name "file*"|xargs rm -f 
real    0m0.005s
user    0m0.002s
sys 0m0.002s

2.查找/var/log/类型是文件,并且名称是.log结尾的,并且7天以前的,然后删除
方式一:

[root@oldboy--day01 ~]# find /var/log/ -type  f -name "*.log" -mtime  +7 -exec rm -f {} \;

方式二:

[root@oldboy--day01 ~]#find /var/log/ -type f -name "*.log" -mtime +7 -delete

方式三:

[root@oldboy--day01 ~]#find /var/log/ -type f -name "*.log" -mtime +7 | xargs rm -f

例题:记得文件内容,不清楚文件名,也不知道路径
1)将find查询的文件结果作为grep的参数

[root@oldboy--day01 ~]# find /etc/ -type f | xargs grep "log_group"

find的逻辑运算

符号作用
-a
-o
-not !

1.查找当前目录下,属主不是root的所有文件

[root@oldboy--day01 ~]# find /home/ ! -user root -ls
[root@oldboy--day01 ~]# find /home/ -not -user root -ls # 使用较少 
2.查找当前目录下,属主属于jack,并且大小大于1k的文件
[root@oldboy--day01 ~]# find /home/ -type f -a -user jacky -a -size +1k 
3.查找当前目录下的属主为root 或者 以xml结尾的普通文件
[root@oldboy--day01 ~]# find . -type f -a \( -user hdfs - o -name '*.xml' \)
####find练习
1.查找/var目录下,属主不是root,且文件名不以f开头的文件

[root@oldboy--day01 ~]# find /var/ -type f ! -user root - a ! -name "f*"

2.查找/var目录下属主为root,且属组为mail的所有文件

[root@oldboy--day01 ~]# find /var/ -type f -user root -a - group mail

3.查找/var目录下不属于root、lp的所有文件

[root@oldboy--day01 ~]# find /var/ -type f ! -user root -a ! -user lp
``
4.查找/var目录下最近一周内产生的文件,同时属主不为root,也不是 postfix的文件

[root@oldboy--day01 ~]# find /var/ -type f -mtime -7 ! - user root ! -name "postfix" 

5.查找/etc目录下大于1M且类型为普通文件的所有文件

[root@oldboy--day01 ~]# find /etc/ -type f -size +1M 

6.将/etc/中的所有目录(仅目录)复制到/tmp下,目录结构不变

[root@oldboy--day01 ~]# find /etc/ -type d -exec mkdir -p /tmp/{} \; 

7.将/etc目录复制到/var/tmp/,/var/tmp/etc的所有目录权限 777/var/tmp/etc目录中所有文件权限666

[root@oldboy--day01 ~]# cp /etc/ /var/tmp/ -rp
[root@oldboy--day01 ~]# find /var/tmp/etc/ -type d -exec chmod 777 {} \; [root@oldboy--day01 ~]# find /var/tmp/etc/ -type f -exec chmod 666 {} \;

8.保留/var/log/下最近7天的日志文件,其他全部删除

[root@oldboy--day01 ~]# find /var/log/ -type f -mtime +7 -exec rm -f {} \;

9.创建touch file{1..10}10个文件, 保留file9,其他一次全部删除

[root@oldboy--day01 ~]# find ./ -type f -name "file*" ! - name "file9" -exec rm -f {} \; 

10.解释如下每条命令含义

mkdir /root/dir1  #在root下创建一个目录dir1
touch /root/dir1/file{1..10}#在dir1下创建10个文件 
find /root/dir1 -type f -name "file5" #查找文件名为file5的文件
find /root/dir1 ! -name "file5" #查找除了文件名为file5 的文件
find /root/dir1 -name "file5" -o -name "file9" 查找文件名为file5或者文件名为file9的文件 
find /root/dir1 \( -name "file5" -o -name "file9" \) - ls #查找文件名为file5或者file9的文件并以长格式显示
find /root/dir1 \( -name "file5" -o -name "file9" \) - exec rm -vf {} \;#查找文件名为file5或file9的文件并将其删除 
find /root/dir1 ! \( -name "file4" -o -name "file8" \) -exec rm -vf {} \;#查找文件名除了file4或者file8的文件并将其删除
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值