Linux教程

Linux文件查找-find

本文主要是介绍Linux文件查找-find,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

1. find-命令详解;

概念:find命令用于查找目录下的文件,同时也可以调用其他命令执行相应的操作。

应用场景:忘记文件所在位置,或者需要通过内容查找,这时就需要find命令了。

语法格式:find 路径 选项 表达式 动作

 

 

 

 查找方式:文件名称、文件大小、文件时间、文件权限、属主属主等。

 

2.find使用范例

 2.1 基于名称查找;

查找/etc目录下包含ifcfg-eth名称所有文件,-i选项可以忽略大小写。

 

 

 2.2 基于文件大小 查找,

#1.查找大于2M的文件;

find /etc/ -size +2M

#2.查找等于2M的文件;

find /etc/ -size 2M

#3.查找小于2M的文件;

find /etc/ -size -2M

#4.查找大于5M,但是小于7M的文件;fing /etc/ -size +5M -a -size -7M | xargs ls -lh

 

 

 2.3 基于类型查找

#1. f=文件

find /dev -type f

#2. d=目录

find /dev -type d

#3. l=链接

find /dev -type l

#4. b=块设备

find /dev -type b

#5. c=字符设备

find /dev -type c

#6. s=套接字

find /dev -type s

#7. p=管道文件

find /dev -type p

 2.4 基于时间查找

 

#1. for i in {01..10};do date -s 20104$i && touch file-$i;done   ==创建测试文件;

#2. find ./ -iname "file-*" -mtime +7   ==查找7天以前的文件,(不会打印第7天和当天的文件),如果删除,第1天和第2天的文件会被删除,第3天到第9天的数据会保存下来,相当于保留了最近7天的数据。

[root@localhost ~]# find ./ -iname "file-*" -mtime +7
./file-01
./file-02
#3. find ./ -iname "file-*" -mtime -7   ==查找最近7天的文件,不建议使用(会打印当天的文件),最近7天,也就是第4天到第10天的数据,如果删除,那就是删除了第4天到第10天的数据。

[root@localhost ~]# find ./ -iname "file-*" -mtime -7
./file-05
./file-06
./file-08
./file-09
./file-04
./file-07
./file-10
#4. find ./ -iname "file_*" -mtime 7   ==查找第7天文件。

[root@localhost ~]# find ./ -iname "file-*" -mtime 7
./file-03
#5. find ./ -iname "file_*" -mmin 100   =按文件的修改时间来查找文件(单位分钟)。

[root@localhost ~]# find ./ -iname "file-*" -mmin +10
./file-05
./file-06
./file-08
./file-09
./file-01
./file-03
./file-04
./file-07
./file-10
./file-02
#6. 查找/var/log下所有以.log结尾的文件,并保留最近7天的log文件。

[root@localhost ~]# find /var/log/ -type f -mtime -7 -a -name "*.log"
/var/log/anaconda/anaconda.log
/var/log/anaconda/X.log
/var/log/anaconda/program.log
/var/log/anaconda/packaging.log
/var/log/anaconda/storage.log

 2.5 基于用户查找

#1. 查找属主是jack

find /home -user jack

#2. 查找属组是admin

find /home -group admin

#3. 查找属主是jack,属组是admin

find /home -user jack -group admin

#4. 查找属主是jack,并且属组是admin

find /home -user jack -a -group admin

#5. 查找属主是jack,或者属组是admin

find /home -user jack -o -group admin

#6. 查找没有属主

find /home -nouser

#7. 查找没有属组

find /home -nogroup

#8. 查找没有属主,或者没有属组

find /home -nouser -o -nogroup

 2.6 基于权限查找

-perm [/ | -]MODE

MODE: 精确匹配,属主、属组、其他用户,每一项的权限必须相等。

find /root -type f -perm 644 -ls

-MODE: 每一项权限必须包含所指定的权限,例:包含(u涵盖6,并且g涵盖4,并且o涵盖4)。

find /root -type f -perm -644 -ls

/MODE: /或者(U为6 或者g为4 或者o为0),三项只要有一项匹配即可。

find /root -type f -perm -644 -ls

特殊权限(最低权限是4000,4755也满足需求)

find /usr/bin/ /usr/sbin/ -type f -perm -4000 -ls

find /usr/bin/ /usr/sbin/ -type f -perm -2000 -ls

find /usr/bin/ /usr/sbin/ -type f -perm -1000 -ls

 2.7 逻辑运算符

-a 与(并且)
-o 或(或者)
-not|! 非(取反)

 

 

 

#1.查找当前目录下,属主不是root的所有文件

find ./ ! -user root

#2.查找当前目录下,属主属于hdfs,并且大小大于1k的文件

find ./ -type f -a -user hdfs -a -size +1k   

#3.查找当前目录下的属主为root或者以xml结尾的普通文件

find ./ type f -a \(-user root -o -name "*.xml"\) 

 

3.find动作处理

查找到一个文件后,需要对文件进行如何处理  find的默认动作是  -print

-print 打印查找到的内容(默认)
-ls 以长格式显示的方式打印查找到的内容
-delete 删除查找到的文件(仅能删除空目录)
-ok 后面跟自定义 shell 命令(会提示是否操作)
-exec 后面跟自定义 shell 命令(标准写法 -exec \;)
-maxdepth 查找一级目录==tree  -L 1

 

 

 

 

 

 

 3.1 find结合exec

find /etc -name"ifcfg*" -exec cp -rvf {} /tmp \; 复制

find /etc -name"ifcfg*" -exec rm -f {} \;

find /etc -name"ifcfg*" -exec mv {} /tmp \;

 3.2 find结合xargs

xargs 将前者命令查找到的文件作为一个整体传递后者命令的输入,所以其操作的额性能极高;
exec 是将文件一个一个的处理,所以处理性能极低;

#1.删除文件,性能对比。

touch file-{1..10000}

find ./ -name "file-*" -exec rm -f {} \;

find ./ -name "file-*" | xargs rm -f

 

 

#2.文件拷贝

find /usr/sbin/ -type f -perm -4000 | xargs -i cp -rv {} /tmp

find /usr/sbin/ -type f -perm -4000 | xargs -I {} cp -rv {} /tmp

#3.find结合grep

当忘记重要配置文件存储路径时,可通过搜索关键字获取文件其路径;

find /code -type f |xargs grep -R "MySQL_PASSWORD"

find /etc/ -type f |xargs grep -R "oldxu.com"

 

 

 

这篇关于Linux文件查找-find的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!