加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

find用法详解

发布时间:2020-12-13 23:53:36 所属栏目:Linux 来源:网络整理
导读:Linux下find命令在目录结构中搜索文件,并执行指定的操作。Linux下find命令提供了相当多的查找条件,功能很强大 find常见命令参数 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 strong命令选项: /strong -name?? 按照文件名查

Linux下find命令在目录结构中搜索文件,并执行指定的操作。Linux下find命令提供了相当多的查找条件,功能很强大

find常见命令参数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<strong>命令选项:</strong>
-name?? 按照文件名查找文件。
-perm?? 按照文件权限来查找文件。
-user?? 按照文件属主来查找文件。
-group? 按照文件所属的组来查找文件。
-mtime -n +n 按照文件的更改时间来查找文件 【-7 7天之内 +7 7天前】
-nogroup? 查找无效属组的文件,即该文件所属的组在/etc/groups中不存在。
-nouser? 查找无效属主的文件,即该文件的属主在/etc/passwd中不存在。
-newer file1 ! file2 查找更改时间比文件file1新但比文件file2旧的文件。
-type??查找某一类型的文件,诸如:
?????????b - 块设备文件。
?????????d - 目录。
?????????c - 字符设备文件。
?????????p - 管道文件。
?????????l - 符号链接文件。
?????????f - 普通文件。
-size n:[c] 查找文件长度为n块的文件,带有c表示文件长度以字节计。
-depth:在查找文件时,首先查找当前目录中的文件,然后再在其子目录中查找。
-follow:如果find命令遇到符号链接文件,就跟踪至链接所指向的文件。
?
另外,下面三个的区别:
-amin n??? 查找系统中最后N分钟访问的文件
-atime n?? 查找系统中最后n*24小时访问的文件
-cmin n??? 查找系统中最后N分钟被改变文件状态的文件
-ctime n?? 查找系统中最后n*24小时被改变文件状态的文件
-mmin n??? 查找系统中最后N分钟被改变文件数据的文件
-mtime n?? 查找系统中最后n*24小时被改变文件数据的文件

常用的命令展示

查找普通文件/目录

1
2
find? /home/omd? - type? f? (普通文件)
find? /home/omd? - type? d? (查询目录)

只显示1级目录文件且过滤自身

1
find? ./ -maxdepth 1? - type? d? ! -name "hhh"

查找一天内被访问过(access)的文件

1
find? /home/omd/? -atime -1 - type? f

查询inode相同的文件

1
find? / -inum inode数字

除了某个文件以为,其余的均删除

1
2
find? /home/omd/? - type? f ! -name h.txt? | xargs?? rm? –f?
ls? | grep? - v? "h.txt"? | xargs? rm? -rf (与上面类似,删除除了某个文件外的所有文件)

删除目录下所有文件

1
2
find? /tmp/? - type? f - exec? rm? -rf {} ;
find? /tmp/? - type? f | xargs? rm? -rf

查看当前路径下所有文件的信息:

1
2
find? /tmp/? - type? f ! -name a | xargs? rm? –rf
find? ./ - type? f - exec? file? {} ;

?

查找指定时间内修改过的文件

1
2
3
4
5
6
7
8
9
10
# 当前路径下访问文件超过2分钟文件
find? ./ -amin +2
# 当前路径下访问文件刚好2分钟的文件
find? ./ -amin 2
find? ./ -cmin +2
find? ./ -mmin +2
find? ./ -mtime +2
find? ./ -ctime +2
find? ./ -mtime +2
find? ./ -ctime +2
1
2
3
4
find? / -ctime? +20? 最近修改文件时间20分钟以前
find? / -mtime? +7?? 修改文件为7天之前的(最重要)
find? / -mtime? 7??? 修改文件为第7天,就是往前推7天
find? / -mtime? -7?? 修改文件为7天之内的

按照目录或文件的权限来查找文件

1
find? /opt? -perm 777

按大小查找文件

1
2
3
find? / -size +10M? | sort? 【查找大于10M的文件】
find? / -size -10M? | sort? 【查找小于10M的文件】
find? / -size 10M?? | sort?? 【查找10M的文件】

?

在test 目录下查找不在test4子目录之内的所有文件

1
2
find? . /test? -path "test/test4"? -prune -o -print
【可以使用-prune选项来指出需要忽略的目录。在使用-prune选项时要当心,因为如果你同时使用了-depth选项,那么-prune选项就会被 find 命令忽略】

查找比yum.log 但不比hhh.txt新的文件

1
[[email?protected] ftl] # find / newer /var/log/yum.log ! -newer ./hhh.txt

?

查找更改时间在比log2012.log文件新的文件

1
find? ./ -newer log2012.log

在当前目录下查找文件长度大于1 M字节的文件

1
2
find? ./ -size +1000000c –print
find? ./ –size +1M -print

在/home/apache目录下查找文件长度恰好为100字节的文件:

1
find? /home/apache? -size 100c -print

在当前目录下查找长度超过10块的文件

1
find? . -size 10?–print
1
??

其他命令:

1
2
3
4
5
6
7
find? /home/omd/? -name *.txt | while? read? line; do? cp? $line /home/omd/h ; done
for? name in? `chkconfig | grep? 3:on | awk? ‘{print $1}‘ ` ; do? echo? $name >> h.txt; done ;
find? /home/omd/? -name *.txt | xargs? -i cp? {} /home/omd/h
cat? /home/omd/h/he .txt | while? read? line; do? echo? $line >> /home/omd/h .txt ; done ;
cat? /home/omd/h .txt | awk? ‘BEGIN{print "Name "} {print $1}‘
cat? /home/omd/h .txt | xargs? -I {} cat? {}
find? . -name? "*.txt"? | xargs??? sed? -i ‘s/hhhh/hHHh/g‘

find命令之exec/ok/print

ls -l命令放在find命令的-exec选项中

1
find? . - type? f - exec? ls? -l {} ; 【{}?? 花括号代表前面 find 查找出来的文件名】

在目录中查找更改时间在n日以前的文件并删除它们

1
find? ./ -mtime +10 - exec? rm? {} ;

在目录中查找更改时间在n日以前的文件并删除它们,在删除之前先给出提示

1
find? / -mtime +1 -a -name "*.log"? - type? f -ok cp? {} /tmp/ftl? ; 【-ok是安全模式,根 exec 效果同】

-exec中使用grep命令

1
find? /etc? -name "passwd*"? - exec? grep? "root"? {} ; 【过滤文件内容用】

查找文件移动到指定目录

1
find? . -name "*.log"? - exec? mv? {} .. ;

用exec选项执行cp命令 ?

1
find? . -name "*.log"? - exec? cp? {} test3 ;

用xargs选项执行cp命令 ?

1
find /root -name “*txt” | xargs rm -rf

?

-exec
? ? 1.参数是一个一个传递的,传递一个参数执行一次rm
? ? 2.文件名有空格等特殊字符也能处理
-xargs?
? ? 1.一次将参数传给命令,可以使用-n控制参数个数
? ? 2.处理特殊文件名需要采用如下方式:
? ? find . -name "*.txt" print0 |xargs -0 rm {}?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读