当前位置: 首页 > article >正文

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参数就是文件匹配,可用的选项如下
  1. 八进制权限模式
    • 精确匹配
      • 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)表示其他用户有读和执行权限。】等
  2. 符号模式(按用户类别)
    • 精确匹配用户权限
      • 可以使用符号模式按用户类别来精确匹配权限。例如,-perm -u = rwx,其中-u表示文件所有者(user),= rwx表示要求所有者的权限必须是读、写、执行权限。同样的,-g用于表示文件所属组(group),-o用于表示其他用户(others)。例如,-perm -g = r -会查找文件所属组只有读权限(没有写和执行权限)的文件。
    • 部分匹配用户权限
      • 还可以进行部分匹配,如-perm -u + rwx。这里+表示匹配包含这些权限的情况。这意味着查找文件所有者至少有读、写、执行其中一种权限的文件。例如,一个文件所有者权限是rw -,使用-perm -u + rwx也会匹配到这个文件,因为所有者有读和写权限,满足“至少有一种权限”的条件。
  3. 混合模式(八进制与符号)
    • 可以将八进制和符号模式混合使用,例如-perm -u = rwx,g = r -。这个表达式首先要求文件所有者有读、写、执行权限(-u = rwx),同时文件所属组只有读权限(g = r -)。这种模式在需要同时精确匹配多个用户类别权限时非常有用。
  4. 模糊匹配(使用/
    • 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

http://www.kler.cn/a/428542.html

相关文章:

  • IDEA中Maven使用的踩坑与最佳实践
  • 步入响应式编程篇(二)之Reactor API
  • 在Ubuntu上安装RabbitMQ教程
  • 基于STM32的智能门锁安防系统(开源)
  • HTML `<head>` 元素详解
  • 日历热力图,月度数据可视化图表(日活跃图、格子图)vue组件
  • 计算机视觉:学习指南
  • 【python 批量将PPT中各种东西保存为图片 没有水印】
  • 在 Spring Boot 中使用 JPA(Java Persistence API)进行数据库操作
  • Telnet不安全?如何配置使用更安全的STelnet远程登录华为AR1000V路由器?
  • docker修改并迁移存储至数据盘
  • C语言求斐波那契数(不考虑溢出)(递归+迭代)
  • mobi文件转成pdf
  • App自动化测试用例的录制与编写
  • 服务器被ping的风险,如何开启和禁止ping?
  • 国内有什么AI软件可供使用
  • k8s 之 StatefulSet
  • 力扣100题--移动零
  • C++打造局域网聊天室第四课: 动态启用或禁用窗口及MFC消息映射机制
  • QT 中 QString 转换为 Unicode 和 ASCII 的方法
  • 【JavaEE 初阶】⽹络编程套接字
  • 【Linux】Git
  • 运输层4——TCP格式(重点!)
  • 24/12/8 算法笔记<强化学习> AC:actor-critic
  • 安装部署PowerDNS--实现内网DNS解析
  • AI视频玩法:动物融合技术解析