首页 > 其他分享 >find常用示例

find常用示例

时间:2023-03-22 20:01:40浏览次数:43  
标签:文件 常用 name 示例 当前目录 查找 root find

1、简介

 用于在文件树中查找文件,并作出相应的处理

2、参数

pathname

find命令所查找的目录路径。例如用“.”来表示当前目录,用“/”来表示系统根目录。

-print

find命令将匹配的文件输出到标准输出。

-exec

find命令对匹配的文件执行该参数所给出的shell命令。相应命令的形式为'command' { } ;,注意{ }和\;之间的空格。

-ok

和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行。

-depth

在查找文件时,首先查找当前目录中的文件,然后再在其子目录中查找。

-name

按照文件名查找

-perm

按照文件权限来查找

-prune

可用使find命令不在当前制定的目录中查找,如果同时使用-depth选项,那么-prune将被find忽略

-user

按照文件属主查找

-group

按照文件属组查找

-nouser

查找无有效属主的文件

-nogroup

查找无有效属组的文件

-newer file1 file2

查找更改时间比file1新,但是比file2旧的文件

-type

查找某一类型的文件,诸如:f-普通文件、d-目录、c-字符文件、b-块设备、p-管道文件、l-符号连接

-size

[c] 查找文件长度为n块的文件,带有c时表示文件长度以字节计

-fstype

查找属于某一类型文件系统的文件

-mount

查找文件时不跨越文件系统mount点

-follow

如果find命令遇到符号连接文件,就跟踪至连接所指向的文件

-cpio

对匹配的文件使用cpio命令,将文件备份到磁带设备中

-mtime -n +n

按照文件的修改时间来查找,-n文件更改时间距现在n天以内,+n文件更改时间距现在n天以前

 -amin n

查找系统中最后n分钟访问的文件

-atime n

查找系统中最后n*24小时访问的文件

-cmin n

查找系统中最后n分钟被改变文件状态的文件

-ctime n

查找系统中最后n*24分钟被改变文件状态的文件

-mmin n

查找系统中最后n分钟被改变文件数据的文件

-mtime n

查找系统中最后n*24小时被改变文件数据的文件

3、示例

3.1.查找指定时间内修改过的文件(查找两天内修改过的文件)
find-atime -2
 
3.2.根据关键字查找(查找当前目录以.log结尾的文件)
find .-name "*.log"
 
3.3.根据文件权限查找(查找/tmp目录下权限为755的文件)
find/tmp -perm 755
 
3.4.根据文件类型查找
find . -type d -print #查找当前目录下的目录
find . ! -type d -print #查找当前目录下的非目录
 
3.5..根据文件大小查找(查找当前目录下大于1k的文件)
find-size +1000c -print
 
3.6.根据文件名查找
find .-name "*.txt"
 
3.7.使用exec或ok来执行shell命令
3.7.1.显示当前目录下面所有大于10k的文件,exec后面执行了一个命令,{}代表文件名
find .-type f -size +10k -exec ls -l {} \;
 
3.7.2.查找/tmp下10天前的文件,删除
find/tmp -type f -mtime +10 -ok rm {} \;
 
3.7.3.备份配置文件,添加.bak扩展名
find .-name "*.conf" -exec cp {} {}.bak \;
 
3.7.4.查找主目录下被其他用户写入的文件
find ~-perm -002 -exec chmod o-w {} \;
 
3.8.-print匹配条件
3.8.1.忽略某个目录(在httpd目录下查找文件但不希望在/httpd/conf目录下查找)
findhttpd -path "httpd/conf" -prune -o -print
 
3.8.2.匹配多个条件,采用OR条件操作
find .\( -name "*.txt" -o -name "*.conf" \) -print
 
3.9.xargs命令
有些命令不能接受过多参数,此时命令执行可能会失败,错误信息通常是“参数列太长”或“参数列溢出”,这就是xargs命令的用处所在find | xargs COMMAND
3.9.1.在当前目录下所以普通文件中过滤“nologin”这个词
find .-type f -print |xargs grep "nologin"
 
3.10.locate命令
查询系统上预建的文件索引数据库,依赖于先构建索引,构建过程需要遍历整个根文件系统,极消耗资源。
工作特点:查找速度快,模糊查找,非实时查找。
-i   执行区分大小写的搜索
-n x  只列举前x个匹配选项  
 
3.11.目录中查找更改时间在5日以前文件并删除
find/logs -type f -mtime +5 -exec rm {} \;
 
3.12.处理/bin/rm: argument list too long
find/var/spool/clientmqueue -type f -print -exec rm -f {} \;
 
3.13.否定查找
find .! -name test.txt -print
 
3.14.合并查找
find .\( -name "*.txt" -o -name "*.py" \) -print
 
3.15.查询深度
find .-maxdepth 1 -type f - print
 
3.16.找出/home/user下所有空子目录
find/home/user -maxdepth 1 -type d -empty
 
3.17.将所有文件名中含有”txt”的文件移入/home/user目录
find-iname "*txt*" -exec mv -v {} /home/user \;
 
3.18.找出文件名结尾有空格的文件
find .-type f -exec egrep -l " +$" {} \;
 
3.19.找出文件名有tab缩进符的文件
find .-type f -exec egrep -l $'\t' {} \;

4、补充

find的使用格式如下:
$ find <指定目录> <指定条件> <指定动作>
- <指定目录>:  所要搜索的目录及其所有子目录。默认为当前目录。
- <指定条件>:  所要搜索的文件的特征。
- <指定动作>:  对搜索结果进行特定的处理。
如果什么参数也不加,find默认搜索当前目录及其子目录,并且不过滤任何结果(也就是返回所有文件),将它们全都显示在屏幕上。
 
find命令用于查找文件和目录,任何位于参数之前的字符串都将被视为欲查找的目录。
find 可以指定查找条件如名称,类型,时间,文件大小,权限和所有者查找,针对多个条件进行与或非的逻辑运算。我们可以控制find的查找的行为,
还可以和其他命令组合使用。
find
find .
find . -print
三者等效, 查找当前目录下所有的文件和目录(递归子目录),以每行一个文件或者目录的形式列举出,不包含隐藏文件
find lib opt bin
同上,查找指定的多个目录(lib/opt/bin)
 
一、指定查找条件
1) 按名称查找
find . -name readme.txt
查找当前目录下(递归子目录)的所有名为readme.txt的文件
 
find . -name \*.txt
find . -name "*.txt"
查找当前目录下(递归子目录)的所有名称以.txt结尾的文件,注意*号的写法,需要前面加\或者放到双引号中
 
find . -iname \*.txt
默认find是区分大小写的,如果不想区分大小写,请使用-iname替代-name,如上则"abc.TXT"将被查找到
 
2) 按类型查找
find . -type d
查找当前目录下(递归子目录)的所有目录
 
find . -type f
查找当前目录下(递归子目录)的所有文件
 
find . -type l
查找当前目录下(递归子目录)的所有符号链接
 
3) 按时间查找
=====以小时为单位的时间=====
find 命令三个选项用于按照时间查找,单位都是小时:
mtime — 文件内容上次修改时间
atime — 文件被读取或访问的时间
ctime — 文件状态变化时间
这三个选项都需要配置一个n值使用,可以是-n / n / +n:
-n 小于 n
n 正好与 n 相等
+n 大于 n
 
find . -mtime -1
查找当前目录下(递归子目录)的所有1小时内修改的文件和目录
 
find . -mtime +1
查找当前目录下(递归子目录)的所有修改时间超过1小时的文件和目录
 
find . -mtime 1
查找当前目录下(递归子目录)的所有恰好在1小时前修改的文件和目录
 
=====以分钟为单位的时间=====
用法和*time类似,mmin、amin和cmin 的不同在于单位时间是分钟,用于查找在不到1小时的时间内变化了的文件和目录
 
find . -mmin -10
查找当前目录下(递归子目录)的所有10分钟内修改的文件和目录
 
find . -mmin +20
查找当前目录下(递归子目录)的所有20分钟外1小时内修改的文件和目录
 
=====与特定的文件比较=====
-newer,-anewer和-cnewer选项用于查找与特定的文件比较的已修改或访问过的文件,类似mtime,atime和ctime
-newer 指内容最近被修改的文件
-anewer 指最近被读取过的文件
-cnewer 指状态最近发生变化的文件
 
find . -newer a.txt
查找当前目录下(递归子目录)的所有修改时间在a.txt之后(所以文件更新)的文件和目录
 
=====按文件大小查找=====
1. -size 选项用于查找满足指定的大小条件的文件(注意不查找目录), +表示大于, -表示小于, 没有+1表示正好等于。
文件大小的单位可以是字节(用c表示),  kb(用k表示)。
 
find . -size -100c
查找当前目录下(递归子目录)的所有文件大小小于100字节的文件
 
find . -size +100k
查找当前目录下(递归子目录)的所有文件大小大于100k的文件
 
find . -size 0
查找当前目录下(递归子目录)的所有文件大小为0的文件
 
2. -empty 查找空文件和空文件夹,  和-size 0不同的在于-size 0 只查找空文件,或者说-empty  -type f  等同于-size 0 :
 
find . -empty
查找当前目录下(递归子目录)的所有文件大小为0的文件和空文件夹
 
find . -empty -type f
查找当前目录下(递归子目录)的所有文件大小为0的文件
 
find . -empty -type d
查找当前目录下(递归子目录)的所有空目录
 
5) 按权限和所有者查找
 
find . -perm 777
查找当前目录下(递归子目录)的所有权限为777的文件和目录
 
find . -perm -u=rwx
查找当前目录下(递归子目录)的所有user权限为rwx的文件和目录
 
find . -perm -ug=x
查找当前目录下(递归子目录)的所有user和group权限为x的文件和目录
 
find . -user sky
查找当前目录下(递归子目录)的所有user为sky的文件和目录
 
find . -group users
查找当前目录下(递归子目录)的所有group为users的文件和目录
 
二、查找条件的逻辑运算
1. 逻辑与
find . -name "*.java" -size -mmin -10
find . -name "*.java" -a -size -mmin -10
查找当前目录下(递归子目录)的所有名为*.java并且修改时间在10分钟之内的文件,-a是默认选项
 
2. 逻辑或
find . -name "*.class" -o -name "*.jar"
查找当前目录下(递归子目录)的所有名为*.class或者*.jar的文件和目录
 
3. 逻辑非
find . ! -user sky
查找当前目录下(递归子目录)的所有user不是sky的文件和目录
 
三、控制查找的行为
find . -maxdepth 3 -name "*.txt"
查找当前目录下(递归子目录)的所有名为*.txt的文件,目录深度不超过3层
 
find . -maxdepth 1 -name "*.txt"
查找当前目录下(不递归子目录,因为maxdepth为1)的所有名为*.txt的文件
 
find . -mindepth 3 -name "*.txt"
查找当前目录下(递归子目录)的所有名为*.txt的文件,目录深度不低于3层
 
find . -mindepth 1 -name "*.txt"
查找当前目录下的子目录中(递归子目录)的所有名为*.txt的文件,不包含当前目录
 
find . -depth -name "*.txt"
查找当前目录下(递归子目录)的所有名为*.txt的文件,每个目录都是先在目录中进行查找,然后才继续查找其子目录
 
四、 find和其他命令的组合
find . -name "*.jar" -exec ls -l {} \;
find . -name "*.jar" -ls
查找当前目录下(递归子目录)的所有*.jar文件并使用ls -l列出详细信息
 
find . -name "*.java" -exec grep -H -m 1 HashMap {} \;
查找当前目录下(递归子目录)的所有的含有"HashMap"字样的*.java文件
(grep -H  -m 1的意思是打印文件名,而且如果文件中有一次匹配就退出,避免多次匹配时为这一个文件打印多行)
 
find . -name "*.sh" -exec mv {} backup \;
查找当前目录下(递归子目录)的所有的*.sh文件并移动到backup目录中、、、、
 
========================================
例如经常使用的一个命令场景:
统计代码行数:
find ./ -name "*.[ch]" -o -name "*.cpp" | xargs wc -l
-o:(or)表示两个表达式或的关系。
-a:(and)表示和的关系
xargs将文本内容拆成后面命令的参数。
 
=======================================
以下列出一些find日常使用的命令场景:
1.当前目录下查找文件
[[email protected] ~]#  find . -name test.txt
./findtest/test.txt
 
2.指定目录下查找
[[email protected] ~]#  find /root/ -name test.txt
/root/findtest/test.txt
 
3.忽略大小写查找
[[email protected] ~]#  find /root -iname test.txt
/root/findtest/test.txt
/root/findtest/TEST.txt
 
4.查找目录
[[email protected] ~]#  find / -type d -name test
/usr/lib64/python2.7/unittest/test
/usr/lib64/python2.7/test
/usr/src/kernels/3.10.0-229.14.1.el7.x86_64/include/config/test
/usr/src/kernels/3.10.0-229.14.1.el7.x86_64/lib/raid6/test
 
5.按名称查找php文件
[[email protected] zabbix]#  find . -type f -name events.php
./events.php
 
6.在目录中查找所有的php文件
[[email protected] zabbix]#  find . -type f -name "*.php"
./graphs.php
./tr_logform.php
./authentication.php
./popup_httpstep.php
./image.php
..........
 
7.查找文件权限是777的
[[email protected] ~]#  find . -type f -perm 0777 -print
./findtest/test.txt
 
8.查找文件权限不是777的
[[email protected] ~]#  find . -type f ! -perm 0777 -print
 
9.查找644权限的SGID文件
[[email protected] ~]#  find / -perm 2644
 
10.查找权限为551的粘着位文件
[[email protected] ~]#  find / -perm 1551
 
11.查找所有SUID文件
[email protected] ~]#  find / -perm /u=s
 
12.查找所有SGID文件
[[email protected] ~]#  find / -perm /g+s
 
13.查找所有只读文件
[[email protected] ~]#  find / -perm /u=r
 
14.查找所有可执行文件
[[email protected] ~]#  find / -perm /a=x
 
15.查找所有777文件,并改为644
反斜杠用来告诉find何时命令结束
[[email protected] ~]#  find / -type f -perm 0777 -print -exec chmod 644 {} \;
 
16.查找所有777的目录,并改为755
[[email protected] ~]#  find / -type d -perm 777 -print -exec chmod 755 {} \;
 
17.查找并删除某个文件
[[email protected] ~]#  find . -type f -name "test.txt" -exec rm -f {} \;
 
18.查找并删除多个文件
[[email protected] ~]#  find . -type f -name "*.txt" -exec rm -f {} \;
 
19.查找所有的空文件
[[email protected] ~]#  find /tmp -type f -empty
 
20.查找所有空目录
[[email protected] ~]#  find /tmp -type d -empty
 
21.查找所有隐藏文件
[[email protected] ~]#  find /tmp -type f -name ".*"
 
22.根据用户查找某个文件
[[email protected] ~]#  find / -user root -name test.txt
 
23.根据用户查找所有的文件
在/home下属于某个用户的所有文件
[[email protected] ~]#  find /home -user zabbix
/home/zabbix
/home/zabbix/.bash_history
/home/zabbix/.config
/home/zabbix/.config/abrt
/home/zabbix/mysql-community-release-el7-5.noarch.rpm
/home/zabbix/.lesshst
/home/zabbix/.cache
/home/zabbix/.cache/abrt
/home/zabbix/.cache/abrt/lastnotification
/home/zabbix/.bash_logout
/home/zabbix/.viminfo
/home/zabbix/.mysql_history
/home/zabbix/.bashrc
/home/zabbix/.bash_profile
 
24./home目录下查找某个组的所有文件
[[email protected] ~]#  find /home -group developer
 
25./home目录下忽略大小写查找用户zabbix的所有文件
[[email protected] ~]#  find /home -user zabbix -iname "*.txt"
 
26.查找50天之内修改过的文件
[[email protected] ~]#  find / -mtime 50
 
27.查找50天之内被存取过的文件
[[email protected] ~]#  find / -atime 50
 
28.查找50-100天之内修改过的文件
[[email protected] ~]#  find / -atime +50 -mtime -100
 
29.查找1个小时之内有变化的文件
[[email protected] ~]#  find / -cmin -60
 
30.查找1个小时之内修改过的文件
[[email protected] ~]#  find / -mmin -60
 
31.查找1个小时之内被存取过的文件
[[email protected] ~]#  find / -amin -60
 
32.查找所有的50M大小的文件
[[email protected] ~]#  find / -size 50M
 
33.查找50-100M之间的文件
[[email protected] ~]#  find / -size +50M -size -100M
 
34.查找并删除100M大小的文件
[[email protected] ~]#  find / -size +100M -exec rm -rf {} \;
 
35.查找并删除指定类型,指定大小的文件
[[email protected] ~]#  find / -type f -name *.mp3 -size +10M -exec rm {} \;

标签:文件,常用,name,示例,当前目录,查找,root,find
From: https://blog.51cto.com/zzzhao/6143134

相关文章