共计 4339 个字符,预计需要花费 11 分钟才能阅读完成。
昨日举荐: 每天学一个 Linux 命令(19):rm
命令简介
find 命令在文件系统中搜寻文件和目录。
find 命令用来在指定目录下查找文件,在参数之前的任何字符串都会当作是目录名。应用 find 命令时,如何不设置任何参数,则 find 命令将在当前目录下查找子目录与文件,并且将查找到的子目录和文件全副显示进去。
find 还是一个性能十分弱小的用于解决 Linux 零碎上文件的工具,它能够独自查找文件,也能够与其余程序(命令)联合对须要解决的文件进行操作。
补充阐明
Linux 文件类型:
f #一般文件
l #符号连贯
d #目录
c #字符设施
b #块设施
s #套接字
p #Fifo
UNIX/Linux 文件系统中的每个文件都有三种工夫戳:
- 拜访工夫(-atime/ 天,-amin/ 分钟):用户最近一次拜访工夫。
- 批改工夫(-mtime/ 天,-mmin/ 分钟):文件最初一次被批改的工夫。
- 变动工夫(-ctime/ 天,-cmin/ 分钟):文件元数据(例如权限等)
语法格局
find [目录门路] [选项] [文件名]
find [-H] [-L] [-P] [-D debugopts] [-Olevel] [path...] [expression]
选项阐明
-amin< 分钟 >:# 查找在指定工夫内被存取过的文件或目录,单位分钟
-mmin< 分钟 >:# 查找在指定工夫内被更改过的文件或目录,单位分钟
-mtime<24 小时数 >:# 查找在指定工夫内被更改过的文件或目录,单位 24 小时
-atime<24 小时数 >:# 查找在指定工夫被写入过的文件或目录,单位 24 小时
-cmin< 分钟 >:# 查找在指定工夫之内被更改过的文件或目录
-ctime<24 小时数 >:# 查找在指定工夫之时被更改的文件或目录,单位以 24 小时计算
-daystart:# 从明天开始计算工夫
-depth:# 从指定目录下最深层的子目录开始查找
-exec< 执行指令 >:# 如果 find 命令返回值为 True,就执行该指令
-false:# 将 find 命令返回值都设为 False
-fstype< 文件系统类型 >:# 只查找此指定文件系统类型下的文件或目录
-gid< 群组识别码 >:# 查找匹配此群组识别码的文件或目录
-group< 群组名称 >:# 查找匹配此群组名称的文件或目录
-help 或——help:# 帮忙信息
-links< 连贯数目 >:# 查找匹配指定的硬连接数目标文件或目录
-maxdepth< 目录层级 >:# 设置查找的最大目录层级
-mindepth< 目录层级 >:# 设置查找的最小目录层级
-name< 范本款式 >:# 指定字符串作为寻找文件或目录的范本
-path< 范本款式 >:# 指定字符串作为寻找目录的范本款式
-perm< 权限数值 >:# 查找合乎指定的权限数值的文件或目录
-size< 文件大小 >:# 查找合乎指定的文件大小的文件
-true:#将 find 命令返回值都设为 True
-type< 文件类型 >:# 只查找匹配指定的文件类型的文件
-uid< 用户识别码 >:# 只查找匹配指定的用户识别码的文件或目录
-user< 拥有者名称 >:# 只查找匹配指定的拥有者名称的文件或目录
-version:# 显示版本信息
利用举例
当前目录搜寻所有文件,文件内容蕴含“192.168.1.111”的内容
find . -type f -name "*" | xargs grep "192.168.1.111"
依据文件或者正则表达式进行匹配,查找须要的文件或目录
# 列出当前目录及子目录下所有文件和文件夹
[root@centos7 ~]# find .
#在 /mingongge 目录下查找蕴含 mingongge 结尾的文件名
[root@centos7 ~]# find /mingongge -name "mingongge*.log"
/mingongge/mingongge_errors.log
/mingongge/mingongge.log
/mingongge/mingongge_test.log
#当前目录及子目录下查找所有以.txt 和.log 结尾的文件
[root@centos7 ~]# find . (-name "*.txt" -o -name "*.log")
或
[root@centos7 ~]# find . -name "*.txt" -o -name "*.log"
#匹配文件门路或者文件
[root@centos7 ~]# find /usr/ -path "*txt*"
#基于正则表达式匹配文件门路
[root@centos7 ~]# find . -regex ".*(.txt|.log)$"
#疏忽大小写
[root@centos7 ~]# find . -iregex ".*(.txt|.log)$"
find 否定参数用法举例
# 找出 /mingongge 下不是以.log 结尾的文件
[root@centos7 ~]# find /mingongge ! -name "*.log"
基于目录深度搜寻
# 向下最大深度限度为 5
[root@centos7 ~]# find . -maxdepth 5 -type f
#搜寻出深度间隔当前目录至多 3 个子目录的所有文件
[root@centos7 ~]# find . -mindepth 3 -type f
依据文件工夫戳进行查找
# 查找最近 10 天内被拜访过的所有文件
[root@centos7 ~]# find . -type f -atime -10
#查找超过 10 天内被拜访过的所有文件
[root@centos7 ~]# find . -type f -atime +10
#查找拜访工夫超过 20 分钟的所有文件
[root@centos7 ~]# find . -type f -amin +20
#找出比 mingongge 批改工夫更长的所有文件
[root@centos7 ~]# find . -type f -newer mingongge
删除查找到的匹配文件
# 删除当前目录下所有.txt 文件
[root@centos7 ~]# find . -type f -name "*.txt" -delete
依据文件权限 / 所有权进行匹配:
# 当前目录下找出权限为 777 的文件
[root@centos7 ~]# find . -type f -perm 777# 找出当前目录下所有者是 mingongge 的所有文件
[root@centos7 ~]# find . -type f -user mingongge
#找出当前目录下用户组为 mingongge 的所有文件
[root@centos7 ~]# find . -type f -group mingongge #找出当前目录下权限不是 644 的.log 文件
[root@centos7 ~]# find . -type f -name "*.log" ! -perm 644
find 和 -exec 选项联合应用
# 找出当前目录下所有者为 root 的文件,并把所有者更改为 mingongge 这个用户
[root@centos7 ~]# find .-type f -user root -exec chown mingongge {} ;
#找出以后用户家目录下所有的.log 文件并执行删除动作
[root@centos7 ~]# find $HOME/. -name "*.log" -exec rm {} ;
#查找当前目录下所有.log 文件并将他们拼接起来而后写入到 mingongge.txt 这个文件中
[root@centos7 ~]# find . -type f -name "*.log" -exec cat {} ;> /mingongge.txt
#查找出 10 天前的.log 文件,而后全副挪动到 mingongge 目录下
[root@centos7 ~]# find . -type f -mtime +10 -name "*.log" -exec cp {} mingongge ;
#找出当前目录下所有.log 文件,而后以“File: 文件名”的格局打印输出到屏幕上
[root@centos7 ~]# find . -type f -name "*.log" -exec printf "File: %sn" {} ;
依据文件大小来查找指标文件
# 查找当前目录下文件大小超过 500M 的文件
[root@centos7 ~]# find . -type f -size +500M
./mingongge/backup_file.tar.gz
./mingongge/upload.tar.gz
#查找当前目录超过 500M 的文件,并打印出文件的具体属性信息
[root@centos7 ~]# find . -type f -size +800M -print0 | xargs -0 ls -l
-rw-r--r-- 1 root root 4250099200 Apr 15 2019 ./mingongge/backup_file.tar.gz
-rw-r--r-- 1 root root 6832225765 Oct 14 12:57 ./mingongge/upload.tar.gz
#查找当前目录超过 500M 的文件,并打印出文件的具体大小
[root@centos7 ~]# find . -type f -size +500M -print0 | xargs -0 du -h|sort -nr
6.8G ./mingongge/upload.tar.gz
4G ./mingongge/backup_file.tar.gz
查找零碎中前 5 的大文件
# find / -type f -print0 | xargs -0 du -h | sort -rh | head -n 5
1.1G /download/ubuntu-17.04-desktop-amd64.iso
377M /download/app_backup.tar.gz
100M /usr/lib/x86_64-linux-gnu/libOxideQtCore.so.0
93M /usr/lib/firefox/libxul.so
84M /var/lib/snapd/snaps/core_3604.snap
办法有很多种,都须要与其它命令配合应用,能力查找进去。
find 命令在文件查找及其它的利用方面具备弱小的性能,学习系统命令,find 命令是须要重点把握的,不论是平时的学习,还是日后工作中,这个命令都有着十分重要的作用。
正文完