find文件查找

Posted 少年已不年少

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了find文件查找相关的知识,希望对你有一定的参考价值。

一. find基础语法

find  [路径]  [选项]  [表达式]  [动作]

二. find选项

1. 按文件类型查找

-type:
f:可编辑的文件
d:目录
l:软链接文件
b:块设备文件 磁盘,U盘,/dev/sda
c:字符设备文件 终端
s:socket 安全套接字文件
p:管道文件

find [路径] [选项]
#举例:
[root@Quanyi <sub>]# find /run -type s
/run/vmware/guestServicePipe
/run/dbus/system_bus_socket
/run/udev/control

#查看找出文件的详细信息
[root@Quanyi </sub>]# find /run -type s|xargs ls -l
srw-rw-rw-. 1 root root 0 Apr 14 18:37 /run/dbus/system_bus_socket
srwx------. 1 root root 0 Apr 14 18:37 /run/systemd/cgroups-agent
srw-rw-rw-. 1 root root 0 Apr 14 18:37 /run/systemd/journal/socket
srw-rw-rw-. 1 root root 0 Apr 14 18:37 /run/systemd/journal/stdout
srwxrwxrwx. 1 root root 0 Apr 14 18:37 /run/systemd/notify
srwxrwxrwx. 1 root root 0 Apr 14 18:37 /run/systemd/private

# 查询/etc/目录下所有目录,总共有多少个?
[root@Quanyi ~]# find /etc -type d|wc -l
598

2. 按文件大小查找

-size
-:小于
+:大于
Num:精准但是又不精准的匹配

#举例:
[root@Quanyi <sub>]# find /etc -size +1M
/etc/udev/hwdb.bin
/etc/selinux/targeted/active/policy.kern
/etc/selinux/targeted/contexts/files/file_contexts.bin
/etc/selinux/targeted/policy/policy.31

[root@Quanyi </sub>]# find /etc -size -1M
/etc/crypttab
/etc/security/opasswd
/etc/.pwd.lock
/etc/environment
/etc/exports
/etc/motd

# 1.在/opt下创建1000个文件
# 2.使用find找出(/opt下小于1k的文件)并删除
[root@Quanyi <sub>]# find /opt/ -size -1k|xargs rm -fr

# 1.在/opt下创建1000个文件
# 2.使用find找出(/opt下小于1k的文件)把它们全部移动到/tmp下
mv 源文件 目标路径
mv -t 目标路径 源文件
[root@Quanyi </sub>]# find /opt/ -size -1k |xargs mv -t /tmp

xargs:
-i:指定数据流的位置,将数据流放入中
[root@Quanyi ~]# find /opt/ -size -1k|xargs -i mv- /tmp

3. 按文件名查找

-name:严格区分大小写
-iname:不区分大小写
* 匹配0次或多次以上

#举例:
[root@Quanyi <sub>]# find /tmp -name abc
/tmp/abc
[root@Quanyi </sub>]# find /tmp -name *a.sh
/tmp/a.sh
[root@Quanyi <sub>]# find /tmp -name a.txt*
/tmp/a.txt
[root@Quanyi </sub>]# find /tmp -name *a.log*
/tmp/a.log

[root@Quanyi ~]# find /tmp -iname ceshi
/tmp/ceshi

4. 按文件时间查找

-atime:文件访问时间查找
-mtime:文件内容创建,修改时间查找
-ctime:文件属性,修改时间查找

Num:查找第N天的文件(不包括今天)
+Num:查找第N天之前的所有文件(不包括今天)
-Num:查找从今天开始算,7天内的文件

## 一个文件有以下三种时间
access time: atime
modify time: mtime
change time: ctime

# 查看三种时间: stat [文件名]

#举例:
[root@Quanyi <sub>]# stat abc
File: ‘abc’
Size: 4 Blocks: 8 IO Block: 4096 regular file
Device: 803h/2051d Inode: 33598898 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: unconfined_u:object_r:admin_home_t:s0
Access: 2022-04-13 14:49:41.743964216 +0800
Modify: 2022-04-12 16:52:33.368817089 +0800
Change: 2022-04-12 17:04:10.140801409 +0800
Birth: -

## 保留近七天的文件
[root@Quanyi </sub>]# find /opt ! -mtime -7|xargs rm -f
[root@Quanyi ~]# ll
total 0
-rw-r--r-- 1 root root 0 Apr 24 00:00 file-24
-rw-r--r-- 1 root root 0 Apr 25 00:00 file-25
-rw-r--r-- 1 root root 0 Apr 26 00:00 file-26
-rw-r--r-- 1 root root 0 Apr 27 00:00 file-27
-rw-r--r-- 1 root root 0 Apr 28 00:00 file-28
-rw-r--r-- 1 root root 0 Apr 29 00:00 file-29
-rw-r--r-- 1 root root 0 Apr 30 00:00 file-30

5. 按照文件用户和组查找

-user:查找文件的属主
-nouser:文件没有属主用户的

-group:查找文件的属组
-nogroup:文件没有属组的

#举例:
[root@Quanyi <sub>]# find /tmp -user jiangsu
/tmp/test/lamp
/tmp/test/lamp_file
/tmp/a.log
/tmp/b.log
/tmp/ceshi
/tmp/abc

[root@Quanyi </sub>]# find /tmp -nouser
/tmp/test
[root@Quanyi /tmp]# ll
drwxrwsrwx. 2 1025 1025 47 Apr 12 15:58 test

[root@Quanyi <sub>]# find /tmp -group jiangsu
/tmp/a.log
/tmp/b.log
/tmp/ceshi
/tmp/abc

[root@Quanyi </sub>]# find /tmp -nogroup
/tmp/test
/tmp/test/lamp_file

6. 多条件组合查找

[root@Quanyi <sub>]# find /etc/ -mtime -7
/etc/
/etc/resolv.conf
/etc/group-
/etc/gshadow-
/etc/group
/etc/passwd-
/etc/gshadow
/etc/shadow-
/etc/passwd
/etc/shadow
/etc/tuned/active_profile
/etc/tuned/profile_mode
/etc/sudoers

[root@Quanyi </sub>]# find /etc/ -type d -mtime -7
/etc/

[root@Quanyi ~]# find /opt/ -name dir* -name *0 -type f -mtime -7 -size +1K

7. 按权限查找

-perm

## 权限精确查找
[root@Quanyi <sub>]# find ./ -perm 222
[root@Quanyi </sub>]# find ./ -perm 644

## -权限
# 每个权限上,都要包含该数字权限的所有权限
#举例:
[root@Quanyi <sub>]# find ./ -perm 644 -ls
33960906 4 -rw-r--r-- 1 root root 18 Dec 29 2013 ./.bash_logout
33960907 4 -rw-r--r-- 1 root root 176 Dec 29 2013 ./.bash_profile
33960909 4 -rw-r--r-- 1 root root 100 Dec 29 2013 ./.cshrc

# /权限
# 总共三个权限位,只要有一个权限位的权限被包含,就可以找到
[root@Quanyi </sub>]# find ./ -perm 644 -ls
属主权限位,有一个r或者有一个w就满足条件
属组权限位,有一个r就满足条件
其他用户权限位,有一个r就满足条件

8. 按深度查找

-maxdepth
针对目录层级查找
# 查找/etc/目录下的所有1级和2级目录
[root@Quanyi ~]# find /etc -type d -maxdepth 2

三. find动作

-print:打印查找到的内容到终端上(find命令默认就是打印结果 -print

-ls:查看文件的详细信息 |xargs ls -l 或者 ls -l $(find xxx) 或者 ls -l `find xxx`

-delete:删除查找到的文件(bug跟ls,ls看不见的,也删除不掉)并且只能删除空目录
其他删除方法:   |xargs rm -fr 或者 rm -fr $(find xxx) 或者 rm -fr `find xxx`
[root@localhost ~]# find / -name etc -delete
find: cannot delete ‘/run/initramfs/state/etc’: Directory not empty
find: cannot delete ‘/etc’: Directory not empty
find: cannot delete ‘/var/tmp/etc’: Directory not empty

-ok:找到文件后,执行后面的bash命令,询问是否要操作
语法:-ok 系统命令 \\;
find / -type f -name file* -ok mv /tmp \\;

-exec:找到文件后,执行后面的bash命令
语法:-exec 系统命令 \\;
find / -type f -name file* -exec mv /tmp \\;

四. find多条件

-a:和,并且(默认)
-o:或者
!:取反

以上是关于find文件查找的主要内容,如果未能解决你的问题,请参考以下文章

find 文件查找

如何使用find命令查找文件?

Linux find 查找 并删除文件 杀掉进程

文件查找find

Linux文件查找之Find详解

Linux下find命令和grep命令查找文件