昨日举荐:每天学一个 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 -nr6.8G    ./mingongge/upload.tar.gz4G     ./mingongge/backup_file.tar.gz

查找零碎中前5的大文件

# find / -type f -print0 | xargs -0 du -h | sort -rh | head -n 51.1G    /download/ubuntu-17.04-desktop-amd64.iso377M    /download/app_backup.tar.gz100M    /usr/lib/x86_64-linux-gnu/libOxideQtCore.so.093M /usr/lib/firefox/libxul.so84M /var/lib/snapd/snaps/core_3604.snap

办法有很多种,都须要与其它命令配合应用,能力查找进去。

find 命令在文件查找及其它的利用方面具备弱小的性能,学习系统命令,find 命令是须要重点把握的,不论是平时的学习,还是日后工作中,这个命令都有着十分重要的作用。