如果你想在Linux系统众多的文件中找到你想要的文件,那么find命令就是你的法宝
1. 简单的认识一下find

find命令用来在指定目录下查找文件,任何位于参数之前的字符串都将被视为欲查找的目录名。
如果使用该命令时,不设置任何参数,则 find 命令将在当前目录下查找子目录与文件。
并且将查找到的子目录和文件全部进行显示。

2. find基本语法

find 指定路径 [选项] 搜索目录

注意:
~表示用户所在目录
.表示当前目录
/表示根目录

示例:
(1)查找当前目录下有没有DM文件
在home目录下有这些文件
在这里插入图片描述

[root@localhost100 home]# find . -name DM
./DM

(2)查找用户所在目录下有没有DM文件

[root@localhost100 home]# cd ~
[root@localhost100 ~]# ll
总用量 4
drwxr-xr-x. 2 root root 4096 5月  17 09:53 shelltest
[root@localhost100 ~]# find ~ -name DM

(2)查找用户根目录下有没有DM文件

[root@localhost100 ~]# cd /
[root@localhost100 /]# ll
总用量 92
lrwxrwxrwx.   1 root root     7 3月  10 12:08 bin -> usr/bin
dr-xr-xr-x.   6 root root  4096 4月  12 17:50 boot
drwxr-xr-x.  19 root root  3340 5月  26 16:25 dev
drwxr-xr-x. 144 root root 12288 5月  26 16:25 etc
drwxr-xr-x.   8 root root  4096 5月  12 11:44 home
lrwxrwxrwx.   1 root root     7 3月  10 12:08 lib -> usr/lib
lrwxrwxrwx.   1 root root     9 3月  10 12:08 lib64 -> usr/lib64
drwx------.   2 root root 16384 3月  10 12:07 lost+found
drwxr-xr-x.   2 root root  4096 4月  11 2018 media
drwxr-xr-x.   2 root root  4096 4月  11 2018 mnt
drwxr-xr-x.   3 root root  4096 4月  12 17:23 newdisk
drwxr-xr-x.  10 root root  4096 5月  24 15:02 opt
dr-xr-xr-x. 280 root root     0 5月  26 16:25 proc
dr-xr-x---.   8 root root  4096 5月  26 16:27 root
drwxr-xr-x.  44 root root  1280 5月  26 16:28 run
lrwxrwxrwx.   1 root root     8 3月  10 12:08 sbin -> usr/sbin
drwxr-xr-x.   2 root root  4096 4月  11 2018 srv
dr-xr-xr-x.  13 root root     0 5月  26 16:25 sys
drwxrwxrwt.  47 root root 20480 5月  26 16:28 tmp
drwxr-xr-x.  13 root root  4096 3月  10 12:08 usr
drwxr-xr-x.  21 root root  4096 3月  10 12:27 var
[root@localhost100 /]# find / -name home
/home
/home/logonuser/.local/share/gvfs-metadata/home
/root/.local/share/gvfs-metadata/home
[root@localhost100 /]# 

可以采用命令 find -help和man find查看它详细解释

[root@localhost100 home]# find -help 
用法: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [expression]
默认路径为当前目录;默认表达式为 -print
表达式可能由下列成份组成:操作符、选项、测试表达式以及动作:

操作符 (优先级递减;未做任何指定时默认使用 -and):
      ( EXPR )   ! EXPR   -not EXPR   EXPR1 -a EXPR2   EXPR1 -and EXPR2
      EXPR1 -o EXPR2   EXPR1 -or EXPR2   EXPR1 , EXPR2

positional options (always true): -daystart -follow -regextype

normal options (always true, specified before other expressions):
      -depth --help -maxdepth LEVELS -mindepth LEVELS -mount -noleaf
      --version -xautofs -xdev -ignore_readdir_race -noignore_readdir_race

比较测试 (N 可以是 +N 或 -N 或 N): -amin N -anewer FILE -atime N -cmin N
      -cnewer 文件 -ctime N -empty -false -fstype 类型 -gid N -group 名称
      -ilname 匹配模式 -iname 匹配模式 -inum N -ipath 匹配模式 -iregex 匹配模式
      -links N -lname 匹配模式 -mmin N -mtime N -name 匹配模式 -newer 文件
      -nouser -nogroup -path PATTERN -perm [-/]MODE -regex PATTERN
      -readable -writable -executable
      -wholename PATTERN -size N[bcwkMG] -true -type [bcdpflsD] -uid N
      -used N -user NAME -xtype [bcdpfls]
      -context 文本


操作: -delete -print0 -printf 格式 -fprintf 文件 格式 -print 
      -fprint0 文件 -fprint 文件 -ls -fls 文件 -prune -quit
      -exec 命令 ; -exec 命令 {} + -ok 命令 ;
      -execdir 命令 ; -execdir 命令 {} + -okdir 命令 ;

按照文件名搜索

find 命令是完全匹配的,必须和搜索关键字一模一样才会列出
搜索的文件名必须和你的搜索内容一致才能找到文件,若只是包含搜索内容,就不会找到文件

-name: 按照文件名搜索;
-iname: 按照文件名搜索,不区分文件名大小;
-inum: 按照 inode 号搜索;

logonuser目录下文件内容
在这里插入图片描述

(1)如果只知道文件名,不知道文件在哪里放 例:happy.txt

[root@localhost100 /]# find / -name happy.txt
/home/logonuser/happy.txt
[root@localhost100 /]# 

(2)如果想要按文件名不区分大小写找到目录 Apply

[root@localhost100 /]# find / -iname apply
/home/logonuser/Apply
[root@localhost100 /]# 

(3)按照 inode号(索引节点)搜索文件,Linux内部使用 inode号来识别文件
查看文件inode号

[root@localhost100 logonuser]# ls -i banana.txt 
546886 banana.txt
[root@localhost100 logonuser]# find -inum 546886
./banana.txt
[root@localhost100 logonuser]# 

(4)查找文件名以stu开头的文件

[root@localhost100 /]# find / -name "stu*"
/home/logonuser/study.tar.gz
/run/media/root/CentOS 7 x86_64/Packages/stunnel-4.56-6.el7.x86_64.rpm
/usr/lib64/perl5/gnu/stubs-64.ph
/usr/lib64/perl5/gnu/stubs.ph
/usr/bin/stund
/usr/bin/stunbdc
/usr/share/augeas/lenses/dist/stunnel.aug
/usr/include/gnu/stubs-64.h
/usr/include/gnu/stubs.h
/usr/src/kernels/3.10.0-1160.el7.x86_64/include/config/pci/stub.h
/usr/src/kernels/3.10.0-1160.el7.x86_64/include/config/efi/stub.h
/usr/src/kernels/3.10.0-1160.el7.x86_64/include/config/i2c/stub.h
/usr/lib/x86_64-redhat-linux6E/include/gnu/stubs-64.h
/usr/lib/x86_64-redhat-linux6E/include/gnu/stubs.h
/etc/selinux/targeted/active/modules/100/stunnel
[root@localhost100 /]#

(3)查找/home/logonuser目录下文件名后缀是.txt的文件

[root@localhost100 /]# cd /home/logonuser/
[root@localhost100 logonuser]# find /home/logonuser/ -name "*.txt"
/home/logonuser/test/fruits/apple.txt
/home/logonuser/test/zero/cat/blackcat.txt
/home/logonuser/test/zero/cat/redcat.txt
/home/logonuser/learn/oneday/a.txt
/home/logonuser/.cache/tracker/db-version.txt
/home/logonuser/.cache/tracker/db-locale.txt
/home/logonuser/.cache/tracker/locale-for-miner-apps.txt
/home/logonuser/.cache/tracker/first-index.txt
/home/logonuser/.cache/tracker/last-crawl.txt
/home/logonuser/.cache/tracker/locale-for-miner-user-guides.txt
/home/logonuser/.cache/tracker/parser-sha1.txt
/home/logonuser/banana.txt
/home/logonuser/happy.txt
/home/logonuser/mydata.txt
/home/logonuser/info.txt
[root@localhost100 logonuser]# 

(4)查找文件名称中包含anan的文件

[root@localhost100 logonuser]# find /home/logonuser/ -name "*anan*"
/home/logonuser/banana.txt
[root@localhost100 logonuser]# 

按照文件大小搜索

find 目录 -size n
文件使用了 n 单位个存储单元。
n后面加上b或不写单位 表示默认的单位是512字节的块,则按照 512Byte搜索
n后面加上c 表示按字节搜索
n后面加上k 表示按千字节(kB)搜索
n后面加上w 表示按双字节(中文)搜索
n后面加上M 表示按MB搜索
n后面加上G 表示按GB搜索

可以使用命令:man find 查看find手册
(1)在当前目录下寻找一个大小为43字节的文件

[root@localhost100 learn]# ll
总用量 1496
-rw-r--r--. 1 root root      43 4月  11 17:22 date100.log
-rw-r--r--. 1 root root 1233012 6月   6 14:54 mycal
-rw-r--r--. 1 root root  273136 6月   6 14:54 mydtate
-rwxr--r--. 1 root root      71 4月  11 10:38 mysh.sh
drwxr-xr-x. 2 root root    4096 4月   1 11:25 oneday
[root@localhost100 learn]# find . -size 43c
./date100.log
[root@localhost100 learn]# 

(2)在当前目录下寻找一个比273136字节小的文件

[root@localhost100 learn]# find . -size -273136c
.
./date100.log
./oneday
./oneday/a.txt
./mysh.sh

(3)在当前目录下寻找一个比273136字节大的文件

[root@localhost100 learn]# find . -size +273136c
./mycal
./mydtate
[root@localhost100 learn]# 

(4)在当前目录下寻找一个比1MB大的文件

[root@localhost100 learn]# du -sh *
4.0K	date100.log
1.2M	mycal
272K	mydtate
4.0K	mysh.sh
4.0K	oneday
[root@localhost100 learn]# find . -size +1M
./mycal
[root@localhost100 learn]# 

按照修改时间搜索

find 目录 -选项 n
atime对文件的访问时间
mtime对文件的数据修改时间
ctime对文件的状态修改时间

在这里插入图片描述

time 选项的默认单位是天,而 min 选项的默认单位是分钟。
在这里插入图片描述

(1)查找5天内天访问过的文件

[root@localhost100 logonuser]# find . -atime -5

在这里插入图片描述

(2)查找10-11天修改过的文件

[root@localhost100 logonuser]# ll
总用量 44
drwxr-xr-x. 2 root      root      4096 5月  26 17:29 Apply
-rwxr-xr-x. 1 root      root        15 4月   6 15:28 banana.txt
-rwxrwxrwx. 1 logonuser logonuser 1204 4月   2 12:14 happy.txt
-rw-r--r--. 1 root      root       196 4月   1 14:43 info.txt
drwxrwxrwx. 3 logonuser logonuser 4096 4月  11 17:16 learn
-rw-r--r--. 1 root      root       340 4月   2 15:35 learn.zip
-rw-r--r--. 1 root      root        24 6月   6 16:07 mydata.txt
-rw-r--r--. 1 root      root       215 4月  11 10:22 mydate
-rw-r--r--. 1 root      root       223 4月   2 15:51 myinfo.tar.gz
lrwxrwxrwx. 1 root      root         5 4月   6 11:22 myopt -> /opt/
-rw-r--r--. 1 root      root       922 4月   2 15:53 study.tar.gz
drwxr-xr-x. 4 root      root      4096 4月   6 16:10 test
[root@localhost100 logonuser]# find . -mtime 10
./Apply
[root@localhost100 logonuser]# 

(3)查找10-11天对文件状态修改过的文件

[root@localhost100 logonuser]# find . -ctime 10
./Apply
[root@localhost100 logonuser]# 

按照权限搜索

perm 权限模式:査找文件权限刚好等于"权限模式"的文件
perm -权限模式:査找文件权限全部包含"权限模式"的文件
perm /权限模式:査找文件权限包含"权限模式"的任意一个权限的文件

(1)査找文件权限刚好等于777的文件

[root@localhost100 logonuser]# ll
总用量 44
drwxr-xr-x. 2 root      root      4096 5月  26 17:29 Apply
-rwxr-xr-x. 1 root      root        15 4月   6 15:28 banana.txt
-rwxrwxrwx. 1 logonuser logonuser 1204 4月   2 12:14 happy.txt
-rw-r--r--. 1 root      root       196 4月   1 14:43 info.txt
drwxrwxrwx. 3 logonuser logonuser 4096 4月  11 17:16 learn
-rw-r--r--. 1 root      root       340 4月   2 15:35 learn.zip
-rw-r--r--. 1 root      root        24 6月   6 16:07 mydata.txt
-rw-r--r--. 1 root      root       215 4月  11 10:22 mydate
-rw-r--r--. 1 root      root       223 4月   2 15:51 myinfo.tar.gz
lrwxrwxrwx. 1 root      root         5 4月   6 11:22 myopt -> /opt/
-rw-r--r--. 1 root      root       922 4月   2 15:53 study.tar.gz
drwxr-xr-x. 4 root      root      4096 4月   6 16:10 test
--w-------. 1 root      root         0 6月   6 16:18 yy.txt
[root@localhost100 logonuser]# find . -perm 777
./learn
./happy.txt
./myopt
[root@localhost100 logonuser]# 

(2)査找文件权限全部包含w的文件

[root@localhost100 logonuser]# ll
总用量 44
drwxr-xr-x. 2 root      root      4096 5月  26 17:29 Apply
-rwxr-xr-x. 1 root      root        15 4月   6 15:28 banana.txt
-rwxrwxrwx. 1 logonuser logonuser 1204 4月   2 12:14 happy.txt
-rw-r--r--. 1 root      root       196 4月   1 14:43 info.txt
drwxrwxrwx. 3 logonuser logonuser 4096 4月  11 17:16 learn
-rw-r--r--. 1 root      root       340 4月   2 15:35 learn.zip
-rw-r--r--. 1 root      root        24 6月   6 16:07 mydata.txt
-rw-r--r--. 1 root      root       215 4月  11 10:22 mydate
-rw-r--r--. 1 root      root       223 4月   2 15:51 myinfo.tar.gz
lrwxrwxrwx. 1 root      root         5 4月   6 11:22 myopt -> /opt/
-rw-r--r--. 1 root      root       922 4月   2 15:53 study.tar.gz
drwxr-xr-x. 4 root      root      4096 4月   6 16:10 test
--w-------. 1 root      root         0 6月   6 16:18 yy.txt
[root@localhost100 logonuser]# find . -perm -222
./learn
./happy.txt
./myopt
[root@localhost100 logonuser]# 

(3)査找文件权限包含w的任意一个权限的文件

[root@localhost100 fruits]# ll
总用量 0
-r--------. 1 root      root   0 6月   6 16:28 aa.txt
-rwxr-xr-x. 1 logonuser fruits 0 4月   6 15:33 apple.txt
-rw-r--r--. 1 logonuser fruits 0 4月   6 15:52 pear
[root@localhost100 fruits]# find . -perm /222
.
./pear
./apple.txt
[root@localhost100 fruits]# 

按照所有者和所属组搜索

-uid 用户 ID:按照用户 ID 査找所有者是指定 ID 的文件
-gid 组 ID:按照用户组 ID 査找所属组是指定 ID 的文件
-user 用户名:按照用户名査找所有者是指定用户的文件
-group 组名:按照组名査找所属组是指定用户组的文件
-nouser:査找没有所有者的文件
[root@localhost100 fruits]# ll
总用量 0
-r--------. 1 root      root   0 6月   6 16:28 aa.txt
-rwxr-xr-x. 1 logonuser fruits 0 4月   6 15:33 apple.txt
-rw-r--r--. 1 logonuser fruits 0 4月   6 15:52 pear
[root@localhost100 fruits]# find . -user root
.
./aa.txt
[root@localhost100 fruits]# 

按照文件类型搜索

-type d:查找目录
-type f:查找普通文件
-type l:查找软链接文件
[root@localhost100 logonuser]# ll
总用量 44
-r--------. 1 root      root         0 6月   6 16:25 aa.txt
drwxr-xr-x. 2 root      root      4096 5月  26 17:29 Apply
-rwxr-xr-x. 1 root      root        15 4月   6 15:28 banana.txt
-rwxrwxrwx. 1 logonuser logonuser 1204 4月   2 12:14 happy.txt
-rw-r--r--. 1 root      root       196 4月   1 14:43 info.txt
drwxrwxrwx. 3 logonuser logonuser 4096 4月  11 17:16 learn
-rw-r--r--. 1 root      root       340 4月   2 15:35 learn.zip
-rw-r--r--. 1 root      root        24 6月   6 16:07 mydata.txt
-rw-r--r--. 1 root      root       215 4月  11 10:22 mydate
-rw-r--r--. 1 root      root       223 4月   2 15:51 myinfo.tar.gz
lrwxrwxrwx. 1 root      root         5 4月   6 11:22 myopt -> /opt/
-rw-r--r--. 1 root      root       922 4月   2 15:53 study.tar.gz
drwxr-xr-x. 4 root      root      4096 6月   6 16:28 test
--w-------. 1 root      root         0 6月   6 16:18 yy.txt
[root@localhost100 logonuser]# find . -type l
./myopt
[root@localhost100 logonuser]# 

逻辑运算符

a:and逻辑与
-o:or逻辑或
-not:not逻辑非

(1)在当前目录下搜索大于71,并且文件类型是目录的文件

[root@localhost100 learn]# ll
总用量 1516
-rw-r--r--. 1 root root      43 4月  11 17:22 date100.log
-rw-r--r--. 1 root root 1252994 6月   6 16:37 mycal
-rw-r--r--. 1 root root  277565 6月   6 16:37 mydtate
-rwxr--r--. 1 root root      71 4月  11 10:38 mysh.sh
drwxr-xr-x. 2 root root    4096 4月   1 11:25 oneday
[root@localhost100 learn]# find . -size +71c -a -type d 
.
./oneday
[root@localhost100 learn]# 

(2)在当前目录下搜索文件名是mycal或者是oneday的

[root@localhost100 learn]# find . -name mycal -o -name oneday
./mycal
./oneday
[root@localhost100 learn]# 
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐