文件查找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
动作 | 含义 |
---|---|
打印查找到的内容(默认) | |
-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的文件并将其删除