find命令深度详解
文章目录
- find命令
- 常用选项
- 常用处理动作
- 常用条件及示例
- 根据文件名进行匹配
- 根据文件类型进行搜索
- 参数说明
- 示例
- 基于目录深度搜索
- 参数说明
- 示例
- 根据文件时间戳进行搜索
- 参数说明
- 示例
- 根据文件大小进行匹配
- 参数说明
- 示例
- 根据文件权限/所有权进行匹配
- 参数说明
- 示例
- 借助-exec选项与其他命令结合使用
- 参数说明
- 示例
find命令
用途:主要进行文件搜索
-
基本语法:find [搜索路径] [查找条件] [处理动作]
-
搜索路径:指定 find 命令开始搜索的目录路径。如果省略,find 命令将从当前目录开始搜索。可以使用绝对路径或相对路径。
-
查找条件:用于指定搜索条件,以决定哪些文件或目录将被选中。查找条件可以基于文件名、文件类型、大小、修改时间等多种属性。查找条件可以组合使用,以更精确地定位文件。如果省略查找条件,find 命令将列出指定路径下的所有文件和目录。
-
处理动作:对查找到的文件执行的操作。如果省略处理动作,find 命令将默认打印出查找到的文件名。处理动作可以是执行命令、删除文件、复制文件等。
-
常用选项
-a
:and 必须满足两个条件才显示-o
:or 只要满足一个条件就显示-name
:按照文件名查找文件-iname
:按照文件名查找文件(忽略大小写)-type
:根据文件类型进行搜索-perm
:按照文件权限来查找文件-user
:按照文件属主来查找文件。-group
:按照文件所属的组来查找文件。-fprint 文件名
:将匹配的文件输出到文件。-newer file1 ! newer file2
:查找更改时间比文件file1新但比文件file2旧的文件*
:通配符,如果要查找的文件的名称不清晰,可以使用部分文件名+*搜索
常用处理动作
-print
默认动作,将匹配的文件输出到标准输出-exec
对匹配的文件执行该参数所给出的命令。相应命令的形式为 ‘command’ { } ;,注意{ }和\;之间的空格。-ok
和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行。-delete
将匹配到的文件删除|xargs
将匹配到的文件删除|xargs rm -rf
常用条件及示例
根据文件名进行匹配
- 列出当前目录及子目录下所有文件和文件夹
find .
[root@control ~]# find .
...
.
./array/ip.log
./array/uuid.sh
./array/echo.sh
./array/echo1.sh
./echo.txt
./test.txt
./.bash_profile
[root@control ~]#
- 在/root目录下查找以.txt结尾的文件名
find /root/ -name "*.txt"
[root@control ~]# find /root -name "*.txt"
/root/test/example.txt
/root/userps.txt
/root/echo1.txt
/root/array/array.txt
/root/echo.txt
/root/test.txt
[root@control ~]#
- 在/root目录下查找以.txt结尾的文件名,但忽略大小写
find /root -iname "*.txt"
[root@control ~]# find /root -iname "*.txt"
/root/test/example.txt
/root/userps.txt
/root/echo1.txt
/root/wa.TXT
/root/array/array.txt
/root/echo.txt
/root/test.txt
[root@control ~]#
- 查找 /root/ 下所有以.txt或.sh结尾的文件
find /root/ -name "*.txt" -o -name "*.sh"
[root@control ~]# find /root -name "*.txt" -o -name "*.sh"
/root/test/example.txt
/root/test/dirname.sh
/root/userps.txt
/root/echo1.txt
/root/array/array1.sh
/root/array/array2.sh
/root/array/array3.sh
/root/array/array4.sh
/root/array/array5.sh
/root/array/array6.sh
/root/array/array7.sh
/root/array/array8.sh
/root/array/array.txt
/root/array/for.sh
/root/array/while.sh
/root/array/until.sh
/root/array/uuid.sh
/root/array/echo.sh
/root/array/echo1.sh
/root/echo.txt
/root/test.txt
[root@control ~]#
- 查找 /root/ 下所有以t开头和以.txt结尾的文件
find /root/ -name "*.txt" -a -name "t*"
[root@control ~]# find /root -iname "*.txt" -a -name "t*"
/root/test.txt
[root@control ~]#
- 搜索/root目录下txt结尾的文件,并将输出到指定文件中(re.txt)
find /root/ -type f -name "*.txt" -fprint /tmp/re.txt
[root@control ~]# find /root -iname "*.txt" -fprint find.txt
[root@control ~]# cat find.txt
/root/test/example.txt
/root/find.txt
/root/userps.txt
/root/echo1.txt
/root/wa.TXT
/root/array/array.txt
/root/echo.txt
/root/test.txt
[root@control ~]#
根据文件类型进行搜索
参数说明
-
文件类型
-type 类型参数
-
类型参数列
f
普通文件l
(小写L) 符号连接(软连接)d
目录b
块设备s
套接字
套接字文件用于进程间通信或者网络通信。例如,在 Unix/Linux 系统中,当一个服务器程序(如 Web 服务器)和客户端程序通过网络通信时,可能会创建套接字文件来进行数据传输。在find命令中使用-type s可以查找系统中的套接字文件,如find / -type s可以在根目录下查找所有的套接字文件。
示例
f
普通文件
[root@control ~]# find /home/ -type f
...
/home/hello2/.bash_logout
/home/hello2/.bash_profile
/home/hello2/.bashrc
/home/hello2/.bash_history
[root@control ~]#
l
(小写L)符号连接(软连接)
[root@control ~]# find /usr/bin/ -type l
...
/usr/bin/apropos
/usr/bin/scsi-rescan
/usr/bin/sudoedit
/usr/bin/subscription-manager
/usr/bin/docker-storage-setup
/usr/bin/vimdiff
[root@control ~]#
d
目录
[root@control ~]# find /root/ -type d
/root/
/root/.ssh
/root/test
/root/package
/root/package/package
/root/docker
/root/array
[root@control ~]#
b
块设备
[root@control ~]# find /dev/ -type b
/dev/dm-1
/dev/dm-0
/dev/sr0
/dev/sdb4
/dev/sdb3
/dev/sdb2
/dev/sdb1
/dev/sda2
/dev/sda1
/dev/sdb
/dev/sda
[root@control ~]#
s
套接字
[root@control ~]# find /var/lib/ -type s
/var/lib/mysql/mysql.sock
[root@control ~]#
- 获取/etc/中以.conf结尾的文件
find /etc/ -name "*.conf" -type f
[root@control ~]# find /etc/ -name "*.conf" -type f
...
/etc/oci-register-machine.conf
/etc/containers/registries.conf
/etc/containers/storage.conf
[root@control ~]#
基于目录深度搜索
参数说明
-maxdepth 3
这个参数用于限制查找的深度。maxdepth表示最大深度,3是指定的值。它的含义是find命令只会在起始路径(/usr/local/)及其下两层子目录中进行查找。例如,如果/usr/local/是第 1 层,那么/usr/local/a是第 2 层,/usr/local/a/b是第 3 层,find命令不会查找/usr/local/a/b/c这样更深层次的目录。这样做可以有效地控制查找范围,减少查找时间和资源消耗,尤其是当/usr/local/目录下有大量的嵌套目录和文件时。
示例
- 向下最大深度限制为3的文件夹
find /usr/local/ -maxdepth 3 -type d
- 参数详细解释
/usr/local/:
这是查找的起始路径。在 Linux 系统中,/usr/local/是一个很重要的目录,通常用于存放用户本地安装的软件。例如,用户通过源码编译安装的程序,一般会将可执行文件放在/usr/local/bin,库文件放在/usr/local/lib,文档放在/usr/local/share等。所以这个命令主要是在本地软件安装相关的目录区域进行查找。 - -type d
用于指定查找的文件类型为目录(directory)。这意味着find命令会忽略文件、符号链接等其他类型的对象,只关注目录。例如,在查找过程中,如果遇到/usr/local/a/b/c这样的路径,只有当c是目录时才会被选中,若是文件或符号链接则会被忽略。 - 分解结果中的:
/usr/local/share/man/man1
/usr/local/
第一层/usr/local/share/
第二层/usr/local/share/man/
第三层
- 参数详细解释
[root@control ~]# find /usr/local/ -maxdepth 3 -type d
/usr/local/
/usr/local/bin
/usr/local/etc
/usr/local/games
/usr/local/include
/usr/local/lib
/usr/local/lib64
/usr/local/libexec
/usr/local/sbin
/usr/local/share
/usr/local/share/applications
/usr/local/share/info
/usr/local/share/man
/usr/local/share/man/man1
/usr/local/share/man/man1x
/usr/local/share/man/man2
/usr/local/share/man/man2x
/usr/local/share/man/man3
/usr/local/share/man/man3x
/usr/local/share/man/man4
/usr/local/share/man/man4x
/usr/local/share/man/man5
/usr/local/share/man/man5x
/usr/local/share/man/man6
/usr/local/share/man/man6x
/usr/local/share/man/man7
/usr/local/share/man/man7x
/usr/local/share/man/man8
/usr/local/share/man/man8x
/usr/local/share/man/man9
/usr/local/share/man/man9x
/usr/local/share/man/mann
/usr/local/src
[root@control ~]#
- 索出深度距离当前目录至少2个子目录的所有文件夹
find /usr/local/ -mindepth 2 -type d
- 命令整体解释
这条find命令是在/usr/local/目录下进行文件和目录的查找操作。它会按照特定的条件筛选出符合要求的目录。- 参数含义
/usr/local/:
这是查找操作的起始目录。/usr/local/在 Linux 系统中通常用于存放用户自行安装的软件及其相关文件。例如,许多第三方软件包会将程序文件安装到/usr/local/bin,库文件安装到/usr/local/lib等。
-mindepth 2:
mindepth参数用于指定最小查找深度。这里的值为2,意味着查找操作将跳过/usr/local/目录本身(深度为 1),从其下一级子目录开始查找。例如,如果/usr/local/下有a和b两个子目录,那么查找将从/usr/local/a和/usr/local/b开始,而不会考虑/usr/local/目录。
-type d:
这个参数用于指定查找的文件类型为目录(directory)。也就是说,find命令只会返回符合-mindepth 2条件的目录,而不会返回文件或其他类型的对象。例如,在/usr/local/a/b这个深度为 3 的目录结构中(假设a是/usr/local/的子目录,b是a的子目录),如果b是目录,那么它有可能被find命令返回,前提是满足前面的条件。 - 结果/usr/local/share/applications分解:
/usr/local/
第一层-忽略/usr/local/share/
第二层-开始展示当前目录及后面目录中的文件夹
- 参数含义
[root@control ~]# find /usr/local/ -mindepth 2 -type d
/usr/local/share/applications
/usr/local/share/info
/usr/local/share/man
/usr/local/share/man/man1
/usr/local/share/man/man1x
/usr/local/share/man/man2
/usr/local/share/man/man2x
/usr/local/share/man/man3
/usr/local/share/man/man3x
/usr/local/share/man/man4
/usr/local/share/man/man4x
/usr/local/share/man/man5
/usr/local/share/man/man5x
/usr/local/share/man/man6
/usr/local/share/man/man6x
/usr/local/share/man/man7
/usr/local/share/man/man7x
/usr/local/share/man/man8
/usr/local/share/man/man8x
/usr/local/share/man/man9
/usr/local/share/man/man9x
/usr/local/share/man/mann
[root@control ~]#
根据文件时间戳进行搜索
参数说明
-
Linux文件系统每个文件都有三种时间戳:
- 访问时间(-atime/天,-amin/分钟):用户最近一次访问时间。
- 修改时间(-mtime/天,-mmin/分钟):文件最后一次修改时间
- 变化时间(-ctime/天,-cmin/分钟):文件数据元(例如权限等)最后一次修改时间。
-
stat 命令查看
[root@control ~]# stat /root
File: ‘/root’
Size: 4096 Blocks: 8 IO Block: 4096 directory
Device: fd00h/64768d Inode: 67153985 Links: 7
Access: (0550/dr-xr-x---) Uid: ( 0/ root) Gid: ( 0/ root)
Context: system_u:object_r:admin_home_t:s0
Access: 2024-11-14 02:16:05.542307633 +0800
Modify: 2024-11-14 02:05:18.028378550 +0800
Change: 2024-11-14 02:05:18.028378550 +0800
Birth: -
[root@control ~]#
示例
- 一般我们搜索都直接用atime即可,就是访问时间
- 搜索最近七天内被访问过的所有文件
find /etc/ -type f -atime -7
[root@control ~]# find /etc/ -type f -atime -7
...
/etc/man_db.conf
/etc/vconsole.conf
/etc/locale.conf
/etc/hostname
/etc/aliases.db
/etc/docker/key.json
/etc/docker/daemon.json
/etc/docker/seccomp.json
/etc/vimrc
[root@control ~]#
- 搜索超过七天内(7天外)被访问过的所有文件
[root@control ~]# find /etc/ -type f -atime +7
...
/etc/e2fsck.conf
/etc/mke2fs.conf
/etc/sudo-ldap.conf
/etc/sudo.conf
/etc/sudoers
/etc/.updated
/etc/resolv.conf.save
/etc/mailcap
/etc/mime.types
/etc/oci-umount.conf
/etc/oci-register-machine.conf
/etc/containers/policy.json
/etc/containers/registries.conf
/etc/containers/registries.d/default.yaml
/etc/containers/storage.conf
[root@control ~]#
根据文件大小进行匹配
参数说明
- 用法
find . -type f -size 文件大小单元
-
文件大小单元:
b
—— 块(512字节)c
—— 字节w
—— 字(2字节)k
—— 千字节M
—— 兆字节G
—— 吉字节
示例
- 搜索大于10KB的文件
[root@control ~]# find / -type f -size +10k
...
/centos/Packages/zenity-3.28.1-1.el7.x86_64.rpm
/centos/Packages/zip-3.0-11.el7.x86_64.rpm
/centos/Packages/zlib-1.2.7-18.el7.x86_64.rpm
/centos/Packages/zlib-devel-1.2.7-18.el7.x86_64.rpm
/centos/Packages/zsh-5.0.2-31.el7.x86_64.rpm
/centos/Packages/zziplib-0.13.62-9.el7.x86_64.rpm
/centos/repodata/276ebf1746f2994d58b786a62e58727962f4b633cac7b289b0ef18e80df7578e-other.xml.gz
/centos/repodata/2ff4471767c82fed8b27981c603e3dc9d6559ca69e162f5ca2bb53f2450c8b08-primary.sqlite.bz2
/centos/repodata/5504e9b031f0f2ee7e377b28b5cd0d4785a093acf37e86b4397611341540d7c1-other.sqlite.bz2
/centos/repodata/aced7d22b338fdf7c0a71ffcf32614e058f4422c42476d1f4b9e9364d567702f-c7-x86_64-comps.xml
/centos/repodata/bc140c8149fc43a5248fccff0daeef38182e49f6fe75d9b46db1206dc25a6c1c-c7-x86_64-comps.xml.gz
/centos/repodata/c4a7811896f3a65404455f3631907adaca3bb9bcd93acb6e476a9a7708abe8c7-filelists.sqlite.bz2
/centos/repodata/e005e92e5e4a30b46c189587e09bfdfdc30500df3f4479637d1a9c2a9798aa6e-filelists.xml.gz
/centos/repodata/f4267434952367b8ee0a241f62540b0778b74911e27241d09d60ccdb657ba1a2-primary.xml.gz
[root@control ~]#
[root@control ~]#
- 搜索小于10M的文件
[root@control ~]# find /home -type f -size -10M
/home/ccx/.bash_logout
/home/ccx/.bash_profile
/home/ccx/.bash_history
/home/ccx/.bashrc
/home/test/.bash_logout
/home/test/.bash_profile
/home/test/.bashrc
/home/test/test9
/home/test/.bash_history
/home/ccx1/.bash_logout
/home/ccx1/.bash_profile
/home/ccx1/.bashrc
/home/ccx1/.bash_history
/home/ccx2/.bash_logout
/home/ccx2/.bash_profile
/home/ccx2/.bashrc
/home/ccx2/.bash_history
/home/ccx3/.bash_logout
/home/ccx3/.bash_profile
/home/ccx3/.bash_history
/home/ccx3/.bashrc
/home/test1/.bash_logout
/home/test1/.bash_profile
/home/test1/.bash_history
/home/test1/.bashrc
/home/test2/.bash_logout
/home/test2/.bash_profile
/home/test2/.bashrc
/home/hello1/.bash_logout
/home/hello1/.bash_profile
/home/hello1/.bashrc
/home/hello1/.bash_history
/home/hello2/.bash_logout
/home/hello2/.bash_profile
/home/hello2/.bashrc
/home/hello2/.bash_history
[root@control ~]#
- 搜索等于10KB的文件
[root@control ~]# find / -type f -size 10k
...
/centos/Packages/hyphen-ml-0.7.0-4.el7.noarch.rpm
/centos/Packages/hyphen-bn-0.7.0-4.el7.noarch.rpm
/centos/Packages/hyphen-hsb-0.20110620-5.el7.noarch.rpm
/centos/Packages/hyphen-gu-0.7.0-4.el7.noarch.rpm
/centos/Packages/hyphen-hi-0.7.0-4.el7.noarch.rpm
/centos/Packages/hyphen-kn-0.7.0-4.el7.noarch.rpm
/centos/Packages/hyphen-lt-0.20100531-6.el7.noarch.rpm
/centos/Packages/hyphen-or-0.7.0-5.el7.noarch.rpm
/centos/Packages/hyphen-pa-0.7.0-4.el7.noarch.rpm
/centos/Packages/hyphen-ta-0.7.0-4.el7.noarch.rpm
/centos/Packages/libtranslit-m17n-0.0.2-6.el7.x86_64.rpm
/centos/Packages/libvirt-java-devel-0.4.9-4.el7.noarch.rpm
/centos/Packages/libXdamage-devel-1.1.4-4.1.el7.x86_64.rpm
/centos/Packages/mesa-libGLw-devel-8.0.0-4.el7.x86_64.rpm
/centos/Packages/perl-Pod-Plainer-1.03-4.el7.noarch.rpm
/centos/Packages/perl-Net-SMTP-SSL-1.01-13.el7.noarch.rpm
/centos/Packages/smc-fonts-common-6.0-7.el7.noarch.rpm
/centos/Packages/unique3-devel-3.0.2-8.el7.x86_64.rpm
[root@control ~]#
根据文件权限/所有权进行匹配
参数说明
-perm
参数就是文件匹配,可用的选项如下
- 八进制权限模式
- 精确匹配:
perm
后面可以直接跟一个八进制数字来精确匹配文件权限。例如,-perm 644
。在Linux系统中,文件权限是通过三位八进制数字来表示的,从左到右分别代表文件所有者(user)、文件所属组(group)和其他用户(others)的权限。每个八进制数字又是由三个二进制位组成,分别对应读(r
,二进制为100
,八进制为4
)、写(w
,二进制为010
,八进制为2
)和执行(x
,二进制为001
,八进制为1
)权限。所以644
对应的权限是rw - r - r -
,即文件所有者有读和写权限,文件所属组和其他用户只有读权限。- 也可以如
-perm 755
【所以7(4 + 2+ 1)表示所有者有读、写、执行权限,5(4 + 1)表示组用户有读和执行权限,5(4 + 1)表示其他用户有读和执行权限。】等
- 精确匹配:
- 符号模式(按用户类别)
- 精确匹配用户权限:
- 可以使用符号模式按用户类别来精确匹配权限。例如,
-perm -u = rwx
,其中-u
表示文件所有者(user),= rwx
表示要求所有者的权限必须是读、写、执行权限。同样的,-g
用于表示文件所属组(group),-o
用于表示其他用户(others)。例如,-perm -g = r -
会查找文件所属组只有读权限(没有写和执行权限)的文件。
- 可以使用符号模式按用户类别来精确匹配权限。例如,
- 部分匹配用户权限:
- 还可以进行部分匹配,如
-perm -u + rwx
。这里+
表示匹配包含这些权限的情况。这意味着查找文件所有者至少有读、写、执行其中一种权限的文件。例如,一个文件所有者权限是rw -
,使用-perm -u + rwx
也会匹配到这个文件,因为所有者有读和写权限,满足“至少有一种权限”的条件。
- 还可以进行部分匹配,如
- 精确匹配用户权限:
- 混合模式(八进制与符号)
- 可以将八进制和符号模式混合使用,例如
-perm -u = rwx,g = r -
。这个表达式首先要求文件所有者有读、写、执行权限(-u = rwx
),同时文件所属组只有读权限(g = r -
)。这种模式在需要同时精确匹配多个用户类别权限时非常有用。
- 可以将八进制和符号模式混合使用,例如
- 模糊匹配(使用
/
)perm
后面跟/
可以进行模糊匹配。例如,-perm /ugo = r
会查找文件所有者、所属组或者其他用户有读权限的文件。/
的作用是只要满足ugo = r
中的任何一个条件(所有者、所属组或者其他用户有读权限)就可以匹配。例如,一个文件所有者权限是r -
,所属组权限是---
,其他用户权限是r -
,这个文件就会被-perm /ugo = r
匹配到。
示例
- 找出指定目录下权限是644的txt文件
[root@control ~]# find / -type f -name "*.txt" -perm 644
/usr/share/perl5/Unicode/Collate/allkeys.txt
/usr/share/perl5/Unicode/Collate/keys.txt
/usr/share/perl5/unicore/Blocks.txt
/usr/share/perl5/unicore/CaseFolding.txt
/usr/share/perl5/unicore/NamedSequences.txt
/usr/share/perl5/unicore/SpecialCasing.txt
[root@control ~]#
- 找出指定目录下权限不是644的txt文件
多了个!
,就是取反的常规匹配符,就不多说了哈
[root@control ~]# find / -type f -name "*.txt" ! -perm 644
/tmp/hello1/test.txt
/tmp/hello2/test.txt
/usr/lib/firmware/ivtv-firmware-license-end-user.txt
/usr/lib/firmware/ivtv-firmware-license-oemihvisv.txt
[root@control ~]#
[root@control ~]# ls -l /tmp/hello1
total 8
-rwxr-xr-x. 1 root root 15 Nov 8 07:22 test.sh
-rwxr-xr-x. 1 root root 673 Nov 8 07:21 test.txt
[root@control ~]#
- 找出/目录用户hello1拥有的所有文件
[root@control ~]# find / -type f -user hello1
find: ‘/proc/30376/task/30376/fdinfo/6’: No such file or directory
find: ‘/proc/30376/fdinfo/5’: No such file or directory
/var/spool/mail/hello1
/home/hello1/.bash_logout
/home/hello1/.bash_profile
/home/hello1/.bashrc
/home/hello1/.bash_history
[root@control ~]#
[root@control ~]# ls -l /home/hello1/.bashrc
-rw-r--r--. 1 hello1 hello1 261 Nov 8 07:24 /home/hello1/.bashrc
[root@control ~]#
- 找出/目录用户组hello1拥有的所有文件
[root@control ~]# ls -l /home/hello1/.bashrc
-rw-r--r--. 1 hello1 hello1 261 Nov 8 07:24 /home/hello1/.bashrc
[root@control ~]#
[root@control ~]# find / -type f -group hello1
find: ‘/proc/30465/task/30465/fdinfo/6’: No such file or directory
find: ‘/proc/30465/fdinfo/5’: No such file or directory
/home/hello1/.bash_logout
/home/hello1/.bash_profile
/home/hello1/.bashrc
/home/hello1/.bash_history
[root@control ~]#
借助-exec选项与其他命令结合使用
参数说明
-
-exec选项的基本概念
在find命令中,-exec选项用于对find命令找到的每个文件或目录执行一个指定的命令。它允许你将find命令的查找功能与其他操作(如删除、复制、修改等)结合起来。 -
-exec选项的语法格式
基本语法是-exec command {} \;
。command
是要执行的命令{}
是一个占位符,它会被find命令找到的每个文件或目录的路径所替换\;
是-exec选项的结束标记。
-
可以将exec改为ok,实现效果一样,只是ok会提示你是否操作。而exec不会提示。
[root@control ~]# touch a.sh
[root@control ~]# find $HOME -name "*.sh" -ok rm {} \;
< rm ... /root/a.sh > ? y
[root@control ~]#
[root@control ~]# touch a.sh
[root@control ~]# find $HOME -name "*.sh" -exec rm {} \;
[root@control ~]#
示例
-
删除符合条件的文件
假设想要删除/tmp目录下所有扩展名为.log的文件:
find /tmp -type f -name "*.log" -exec rm {} \;
这个命令首先在/tmp目录下查找(find /tmp),-type f表示只查找文件类型的对象,-name "*.log"表示查找文件名以.log结尾的文件。然后对于每个找到的文件,使用-exec rm {} ;来执行删除操作,其中rm是删除文件的命令,{}被替换为每个符合条件的文件路径。 -
修改符合条件文件的权限
如果想将/home/user/Documents目录下所有文件的权限修改为644:
find /home/user/Documents -type f -exec chmod 644 {} \;
这里find在/home/user/Documents目录下查找文件(-type f),然后对于每个找到的文件,使用-exec chmod 644 {} ;来执行修改权限的操作,其中chmod是修改权限的命令,644是目标权限,{}被替换为每个符合条件的文件路径。 -
复制符合条件的文件到新目录
要将/data/source目录下所有文件复制到/data/destination目录:
find /data/source -type f -exec cp {} /data/destination \;
此命令先在/data/source目录下查找文件(-type f),然后通过-exec cp {} /data/destination ;对每个找到的文件进行复制操作,cp是复制命令,{}代表每个文件的路径,将文件复制到/data/destination目录。 -
找出/tmp目录下所有root的文件,并把所有权更改为用户ccx
find /tmp/ -type f -user root -exec chown ccx {} \;
-
找出家目录下所有的.sh文件并删除
-ok和-exec行为一样,不过它会给出提示,是否执行相应的操作。
[root@control ~]# touch a.sh
[root@control ~]# find $HOME -name "*.sh" -ok rm {} \;
< rm ... /root/a.sh > ? y
[root@control ~]#
[root@control ~]# touch a.sh
[root@control ~]# find $HOME -name "*.sh" -exec rm {} \;
[root@control ~]#
- 查找/home目录下所有.txt文件并把他们拼接到all.txt文件中
find /home/ -type f -name "*.txt" -exec cat {} \;>all.txt
[root@control home]# echo a > a.txt
[root@control home]# echo b > b.txt
[root@control home]#
[root@control home]# find /home/ -type f -name "*.txt" -exec cat {} \;>all.txt
cat: /home/all.txt: input file is output file
[root@control home]# cat all.txt
a
b
[root@control home]#
- 在/root/test目录中查找更改时间在5日以前的文件并删除它们:
下面3个命令实现效果一样
find /root/test -type f -mtime +5 -exec rm {} \;
find /root/test -type f -mtime +5 |xargs rm -rf
find /root/test -type f -mtime +5 -delete