find用法详解
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
|
[root@localhost 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 {}