2024-03-21
Linux
00
请注意,本文编写于 108 天前,最后修改于 100 天前,其中某些信息可能已经过时。

目录

find
按照文件大小查找(单位kMG,k要小写,MG要大写,不带单位就按照B单位来查找)
忽略大小写查询
根据修改时间查找文件
取反
根据用户/组来查找文件
对找出的文件进行处理

find

文件查找,我们在 windows 用的比较多,系统自带的搜索方式、第三方搜索工具 everything 等。 linux 上没有图形化界面,就要借助 find 指令来查了。

语法:

bash
find /etc -maxdepth 1 -type f -name "pa*" 命令 目录... 查找深度 类型 文件名称包含
  • -maxdepth查找深度:目录层级的意思,不指定的话,就按照最大深度来查找
  • -type文件类型:f表示文件,不指定类型的话,文件和目录都会查找
  • "pa*":* 表示匹配任意pa开头的内容,* 号还可以写在开头
bash
[root@localhost /]# find /etc -maxdepth 1 -type f -name "pa*" /etc/passwd /etc/passwd

按照文件大小查找(单位kMG,k要小写,MG要大写,不带单位就按照B单位来查找)

  1. 查找大于100M的文件
bash
find / -type f -size +100M [root@localhost /]# find / -type f -size +100M /proc/kcore find: ‘/proc/1945/task/1945/fdinfo/6’: 没有那个文件或目录 find: ‘/proc/1945/fdinfo/5’: 没有那个文件或目录 /sys/devices/pci0000:00/0000:00:0f.0/resource1_wc /sys/devices/pci0000:00/0000:00:0f.0/resource1 /var/cache/yum/x86_64/7/updates/gen/primary_db.sqlite /usr/lib/locale/locale-archive [root@localhost /]# ll -h /usr/lib/locale/locale-archive -rw-r--r--. 1 root root 102M 3月 15 20:10 /usr/lib/locale/locale-archive

proc 是进程目录,有些进程运行起来之后能看到文件信息,程序运行结束之后,进程文件也消失了,所以看到proc的报错很正常,并且 proc 的权限很高,不是一般人可以访问的,所以也经常会报权限不够等错误信息,所以以后看到 proc 的报错直接忽略即可。

  1. 查找小于2k的文件
bash
find /root/nginx-1.20.2 -type f -size -2k
  1. 查找大于50M同时小于100M的文件
bash
find / -type f -size +50M -and -size -100M

忽略大小写查询

i 是 ignore 的简写,忽略的意思

bash
find /etc -maxdepth 1 -iname "pa*" [root@localhost /]# find /etc -maxdepth 1 -name "pa*" /etc/passwd /etc/passwd- /etc/pam.d [root@localhost /]# find /etc -maxdepth 1 -iname "pa*" /etc/passwd /etc/passwd- /etc/pam.d /etc/Passwd

根据修改时间查找文件

bash
[root@localhost rrx]# stat 1.txt 文件:"1.txt" 大小:0 块:0 IO 块:4096 普通空文件 设备:801h/2049d Inode:51443079 硬链接:1 权限:(0777/-rwxrwxrwx) Uid:( 0/ root) Gid:( 0/ root) 最近访问:2024-03-21 19:54:59.146373949 +0800 最近更改:2024-03-21 19:54:59.146373949 +0800 最近改动:2024-03-21 19:56:03.543898223 +0800 创建时间:-

时间参数:atime mtime ctime amin mmin cmin

时间单位为天, -1 代表一天以内,+1 一天以前

bash
find /opt -type f -mtime -1

时间单位为分钟

bash
[root@localhost ~]# find /root -type f -mmin -20 /root/.bash_history /root/ReadMe.txt /root/.lesshst

查找1天之前,10天之内,修改过的文件

bash
find /etc/ -type f -mtime +1 -and -mtime -10

取反

取反: !

找名称以.txt结尾的文件

bash
[root@localhost ~]# find /root -type f -name "*.txt" # 找名称以.txt结尾的文件 /root/1.txt /root/学习前准备.txt

找名称中不是.txt结尾的文件

bash
[root@localhost ~]# find /root -type f ! -name "*.txt" /root/.bash_logout /root/.bash_profile ...

找文件

bash
[root@localhost ~]# find /root -type f /root/.bash_logout /root/.bash_profile ...

找文件夹

bash
[root@localhost ~]# find /root ! -type f # 找文件夹 /root/jaden /root/wulaoban ...

根据用户/组来查找文件

查找属于 Rrx 用户的所有目录和文件

bash
[root@localhost ~]# useradd Rrx [root@localhost ~]# find / -user Rrx ... /var/spool/mail/Rrx /home/Rrx /home/Rrx/.bash_logout /home/Rrx/.bash_profile /home/Rrx/.bashrc

根据用户组来查

bash
find / -group Rrx

对找出的文件进行处理

格式:

bash
正常的 find 语句 + 操作 exec

比如我们查找到了一些病毒文件,想直接删除

bash
find /tmp -type f -size +10K -exec rm rf {} \;

{} :表示我们找到的那些文件

\; :正常 exec 语句最后要分号结尾,但是分号在 linux 中有特殊的意义,比如一次性执行两个指令可以 ls -lh;id ,这样执行,所以要对 ; 进行转义,意思是不要将 ; 作为 shell 指令的分隔符,\ 就是转义符号

bash
[root@localhost tmp]# find /tmp -name "vm*" -exec rm -rf {} \; find: ‘/tmp/vmware-root_560-2957190359’: 没有那个文件或目录 find: ‘/tmp/vmware-root_555-4282367637’: 没有那个文件或目录 find: ‘/tmp/vmware-root_631-4021718894’: 没有那个文件或目录 [root@localhost tmp]# ls ks-script-ed2ODG nginx_jaden.tar.gz systemd-private-d38b668730bf4589896221daead5dbea-chronyd.service-be3NkF yum.log

下面示例就不演示了

bash
find /root -type f -mmin -30 ! -name ".*" -exec rm {} \; find /root -maxdepth 1 -type d -name "Apa*" -mmin -30 -exec cp -a {} /tmp \;
如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay

本文作者:@Rrx

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!