【one day one linux】find 用法详解小记

find命令的功能很强大,查找文件的选项很多,所以这是一个很实用并且很常用的linux命令。但是他有个缺点就是搜索的时候比较慢的。而与之相对的有一个locate命令。

  1. find的命令格式

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

  

  2. 命令参数:

pathname : find命令所查找的目录路径。相对路径和绝对路径都可以的。

   -print:   find命令将匹配的文件输出到标准输出(默认就是将找到的文件输出到标准输出)

    -exec command {} \ :  find命令对匹配的文件执行该参数所给出的command命令,注意"{}"与  "\"之间的空格。

    -exec ok {} \:   与exec命令参数差不多,只不过多了一个检查,在执行每一个命令之前要求用户来确认是否执行。

  

 3. 命令的选项:

    常用:

    -name filename :   查找名为filename的文件(常用的选项)

    文件属性:

    -perm  xxxx   :   按照xxxx代表的执行权限来查找

    -user   username :按照文件属主来进行查找

    -group  groupname: 按照文件属组进行查找

    -nouser     查找无有效属主的文件,即属主在/etc/passwd中不存在的

    -nogroup         查找无有效属组的文件,即属主在/etc/groups中不存在的

    文件时间属性:

    -mtime -n +n   按照文件更改时间进行查找  ,  -n指n天以内   +n指n天以前

    -atime  -n  +n   按照文件访问时间来查找

    -ctime  -n   +n   按照文件创建时间来查找

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

    文件类型属性:

    -type   查找某一个类型的文件

    b - 块设备目录

    d - 目录

    c - 字符设备文件

    p - 管道文件

    l - 符号链接文件

    f - 普通文件

    其他类型

    -size n [c] : 查找文件长度为n块的文件  ,带 c 的时候表示文件长度以字节计算。

    -depth:  查找文件的时候首先查找当前目录下,然后再查找其子目录。

    -fstype:  查找位于某一类型的文件系统中的文件,这些文件系统类型通常可以在配置文件/etc/fstab中找到,该配置文件中包含了本文件系统的信息。

    -mount : 在查找文件时不跨越文件系统mount点。(这句话不是太理解哈,等下实例中看下。)

    -follow :  如果find命令遇到符号链接文件,就跟踪至链接所指向的文件。

    -cpio:  对匹配的文件使用cpio命令,将这些文件备份到磁盘设备中。

    -prune : 忽略某个目录

  

    另外,下面三个的区别:

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

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

    -cmin n   查找系统中最后N分钟被改变文件状态的文件
    -ctime n  查找系统中最后n*24小时被改变文件状态的文件
    -mmin n   查找系统中最后N分钟被改变文件数据的文件
    -mtime n  查找系统中最后n*24小时被改变文件数据的文件

  4. 使用实例

  (1)-name选项

比较常用的选项,并且可以使用匹配符或者正则表达式来匹配文件(匹配符与正则的区别需要注意下)。如果是具体的文件名可以引号引起来也可以不用引号,但是文件名匹配模式是一定要用引号引起来的。

    

在根目录“/”下查找文件名为 "test.txt"的文件
# find / -name  "test.txt"  -print

#匹配符与正则表达式的应用:查找目录下所有的  “*.log”# find . -name "*.log"  -print

查找目录下以大写字母开头的文件# find / -name "[A-Z]*" -print

查找一个以小写字母开头,数字结尾的文件# find /  -name "[a-z]*[0-9]" -print 

  

    (2)文件属性选项

      -perm   xxx   

查找文件权限为755的文件,可以和-name混合使用
# find / -perm  755 -print

查找一个文件属主是root,属组也是root的文件(这种单独使用是没什么意义的,这都是一些限制条件混合使用)# find / -user root -group root -print   

当然还有查找属主和属组都已经被删除的文件# find . -nouser -nogroup -print

    (3)文件时间属性

# 查找最后48小时内访问过的文件
$  find / -atime  -2

# 查找最后24小时内修改过的文件
$  find / -mtime -1

    (4)忽略某个目录

使用选项 -prune  支出忽略的目录。使用-prune选项的时候注意不要和-depth一起用,-prune会被忽略。

#  忽略test目录下的hello目录
$  find test  -path "test/hello" -prune -o -print 

说明下:find  [-path] [expression]

在路径列表后面是表达式

find test  -path "test/hello" -prune -o -print-a 和 -o 是shell中的短路求值,与 && 和 || 结果类似。-path "test/hello" 为真,则求值-prune ,则与逻辑为真,后面的-print不需要执行,否则求值 -print(利用-o的短路特性)可以理解为如下所示的shell流程:
if -path "test/hello" then
-prune
else
-print

忽略多个目录的操作:

find  test  \( -path test/test4 -o -path test/test3 \)  -prune  -o  -print 

增加一个转义 "\"

查找某一确定文件,-name等选项加在-o 之后

命令:

find test \(-path test/test4 -o -path test/test3 \) -prune -o -name "*.log" -print

   (5)组合使用:操作之后加入命令   find  pathname  -option  [-print ] [  -exec  -ok   command]  {} \;

#查看当前目录下的所有普通文件并通过ls -l来显示详细信息
$ find . -type f -exec ls -l {} \;

#还可以再加一些条件,组合使用
$ find logs  -type f -mtime +5 -exec -ok rm -rf {} #删除五日以前有更改的文件  这个命令在运维的时候很有用,删除一些日志文件的时候。

*有一个很好的应用场景是:find查找文件,然后grep看文件里面是否有我们需要的字段

#在/tmp中寻找*.h,并在这些文件中查找"TEST"字段
$ find /tmp -name *.h | xargs -n50 grep TEST
$ find   /tmp   -name "*.h"   -exec grep "TEST"   {}   \; -print

#将查找到的文件复制到指定地方
$ find /tmp  -name test -exec cp ‘{}‘ /test ‘;‘

特殊文件可以使用cpio的
$ find dir -name filename -print | cpio -pdv newdir  (暂时还不之后cpio的用法,先记录下来)

#可以使用管道来处理find查找出来的 文件列表
$ find ./ -name "*.php" | ls -l -full-time 2>/dev/null | grep "2016-07-03 22:39"
查找2016-07-03 22:39更改过的文件

  

-----

参考链接:

每天一个linux命令find

linux find用法实例

时间: 2024-10-20 17:43:17

【one day one linux】find 用法详解小记的相关文章

linux curl用法详解

linux ‍‍curl用法详解 ‍‍curl的应用方式,一是可以直接通过命令行工具,另一种是利用libcurl库做上层的开发.本篇主要总结一下命令行工具的http相关的应用, 尤其是http下载方面的:下一篇再讲基于libcurl库的开发. curl的命令行工具功能非常强大,这些数据交互的功能基本上都是通过URL方式进行的,我们先来看看curl对多个URL的灵活操作,这些规则使我们的 批处理需求应用起来非常方便. 1.用{}表示多个URL    如 http://site.{one,two,t

git 用法详解小记

1.安装 sudo apt-get install git    git config --global user.name "yourname"       git config --global user.email "137505******@163.com"2.初始化:①创建一个目录:mkdir reangittoday②git init ③->git add filename -> git commit -m "添加说明文字"

linux dd命令参数及用法详解---用指定大小的块拷贝一个文件(也可整盘备份)

linux dd命令参数及用法详解---用指定大小的块拷贝一个文件 日期:2010-06-14 点击:3830 来源: 未知 分享至: linux dd命令使用详解 dd 的主要选项: 指定数字的地方若以下列字符结尾乘以相应的数字: b=512, c=1, k=1024, w=2, xm=number m if=file 输入文件名,缺省为标准输入. of=file 输出文件名,缺省为标准输出. ibs=bytes 一次读入 bytes 个字节(即一个块大小为 bytes 个字节). obs=b

Linux tar 命令参数及用法详解--Linux打包备份命令

linux tar命令参数及用法详解--linux打包备份命令 tar命令 tar - tar 档案文件管理程序的 GNU 版本.下面将逐个介绍其含义tar [-cxtzjvfpPN] 文件与目录 ....常用参数:-c :建立一个压缩文件的参数指令(create 的意思):-x :解开一个压缩文件的参数指令!-t :查看 tarfile 里面的文件!特别注意,在参数的下达中, c/x/t 仅能存在一个!不可同时存在!因为不可能同时压缩与解压缩.-z :是否同时具有 gzip 的属性?亦即是否需

linux wget 命令用法详解(附实例说明)

Linux wget是一个下载文件的工具,它用在命令行下.对于Linux用户是必不可少的工具,尤其对于网络管理员,经常要下载一些软件或从远程服务器恢复备份到本地服务器.如果我们使用虚拟主机,处理这样的事务我们只能先从远程服务器下载到我们电脑磁盘,然后再用ftp工具上传到服务器.这样既浪费时间又浪费精力,那不没办法的事.而到了Linux VPS,它则可以直接下载到服务器而不用经过上传这一步.wget工具体积小但功能完善,它支持断点下载功能,同时支持FTP和HTTP下载方式,支持代理服务器和设置起来

linux cp命令参数及用法详解---linux 复制文件命令cp

linux cp命令参数及用法详解---linux 复制文件命令cp [[email protected]Linux ~]# cp [-adfilprsu] 来源档(source) 目的檔(destination)[[email protected]linux ~]# cp [options] source1 source2 source3 -. directory参数:-a :相当于 -pdr 的意思:-d :若来源文件为连结文件的属性(link file),则复制连结文件属性而非档案本身:-

转:Linux中find命令-path -prune用法详解

在Windows中可以在某些路径中查找文件,也可以设定不在某些路径中查找文件,下面用Linux中的find的命令结合其-path -prune参数来看看在Linux中怎么实现此功能. 假如在当前目录下查找文件,且当前目录下有很多文件及目录(多层目录),包括dir0.dir1和dir2 ...等目录及dir00.dir01...dir10.dir11...等子目录. 1. 在当前目录下查找所有txt后缀文件 find ./ -name *.txt 2.在当前目录下的dir0目录及子目录下查找txt

(转)linux 中特殊符号用法详解

linux 中特殊符号用法详解 原文:https://www.cnblogs.com/lidabo/p/4323979.html # 井号 (comments)#管理员  $普通用户 脚本中 #!/bin/bash   #!/bin/sh井号也常出现在一行的开头,或者位于完整指令之后,这类情况表示符号后面的是注解文字,不会被执行. # This line is comments.echo "a = $a" # a = 0由于这个特性,当临时不想执行某行指令时,只需在该行开头加上 # 就

(转)linux traceroute命令参数及用法详解--linux跟踪路由命令

linux traceroute命令参数及用法详解--linux跟踪路由命令 原文:http://blog.csdn.net/liyuan_669/article/details/25362505 通过traceroute我们可以知道信息从你的计算机到互联网另一端的主机是走的什么路径.当然每次数据包由某一同样的出发点(source)到达某一同样的目的地(destination)走的路径可能会不一样,但基本上来说大部分时候所走的路由是相同的.linux系统中,我们称之为traceroute,在MS