Linux中find 命令

来源:互联网 发布:网络交易管理办法 pdf 编辑:程序博客网 时间:2024/06/02 07:30

    find 是linux命令行工具箱中很棒的命令,之前总结了grep命令一些常见的用法,find 与grep的区别在于find用于查找文件或目录,grep用于在文件中查找匹配的文本(字符串)。此命令提供了相当多的查找条件,功能很强大。

    find常见用法:

    find   path   -option   [   -print ]   [ -exec   -ok   command ]   {} \;

     find 常用的命令参数:

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

   -print: find命令将匹配的文件输出到标准输出

    -name   filename             #查找名为filename的文件  -iname忽略大小写

     -path   使用通配符来匹配文件路径

     -regex  使用正则表达式来匹配文件路径

     -type   根据文件类型进行搜索

     -size    根据文件大小来搜索

       !          否定参数的含义

     -newer 找出比参考文件更新的所有文件

   

1.根据文件名或正则表达式进行搜索

 #find /home/seven -name "*.txt" -print

 #find . \( -name "*.txt" -o -name "*.pdf" \) -print

#find /  -path "*/python/*"  -print

 #find  /  -regex ".*\(\.py\|\.sh\)$"

 #find /home/seven-name "*.txt" -print   匹配所有不以.txt结尾的文件


2.根据文件类型的搜索

普通文件 f

符号链接 l

目录        d

字符设备 c

块设备 b

套接字 s

FIFO  p

#find . -type d -print

#find   /tmp   -name py* -type l 

3.根据文件时间进行搜索

Linux 文件系统中的每一个文件都有三个时间戳

访问时间(-atime)

修改时间(-mtime)

变化时间(-ctime):文件元数据(例如权限或所有权)最后一次改变的时间

基于分钟的:-amin -mmin -cmin

例:(1)找出最近三天改过的所有文件

#find . -type f -atime -3 -print

(2)找出三天前改过的文件

#find . -type f -atime 3 -print

(3)找出修改时间超过3天的文件

#find . -type f -atime 3 -print

(4)  找出比file.txt更新时间更近的文件或目录

#find . -newer file.txt


4.根据文件大小进行搜索

b 块(512字节) c 字节  w字 (2字节)K ,M,G

#find . -type f -size +2M


5.删除匹配的文件

例:删除当前目录下所有.txt文件

 #find . -type f "*.txt" -delete


6.根据文件权限和所有权来进行搜索

1)列出/root 目录内属于用户seven 的文件或目录

#find /root -user seven

(2)列出/home内不属于本地用户的文件或目录

#find /root -nouser seven

同样还有参数 group nogroup

(3) 列出web服务器没有设置好执行权限的php文件

#find . -type f -name "*.php" ! -perm 644 print


7根据目录深度进行搜索

find 命令在搜索时会遍历所有的子目录

使用-maxdepth -mindepth参数可以限制find 命令遍历的目录深度

只允许find 在当前目录中查找的话把 -maxdepth 设置为1

查找深度距离当前目录至少两个子目录的所有文件-mindepth 设置2

注:为了提高搜索效率 -maxdepth应该作为第三个参数在 -type之前出现。


8.find 通过-exec 执行命令

 -exec   command   {} \;      —–将查到的文件执行command操作,{} 和 \;之间有空格   

-ok: 和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,

在执行每一个命令之前,都会给出提示,让用户来确定是否执行

{}是一个与-exec参数搭配使用的特殊字符串,对于每一个匹配的文件 {}都会被替换成相应的文件名


例: (1)找到所有的.txt文件拼接起来,并输入到README.txt文件中

#find . -type f -name "*.txt"-exec cat {} \;>README.txt

    (2)将这一个星期改过的文件复制到 /old目录下

#find . -type f -mtime -7 -exec cp {} old  \;

     ( 3) -exec 只能接受一个命令,无法直接使用多个命令,但可以把多个命令写在一个shell脚本中,

然后在-exec中使用这个脚本

  -exec ./commands.sh {} \;

     (4) -exec 与printf 结合起来可以生成有用的输出信息。



















划闪

0 0
原创粉丝点击