shell脚本【命令3】find:文件检索

本文详细介绍了Linux shell脚本中的find命令,包括其基本用法、常用选项如-name、-user、-atime等,以及逻辑运算符的使用。通过实例展示了如何查找特定名称、属主、时间戳和类型的文件,帮助读者深入理解find工具的高级文件检索功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1  综述:

      find是高级的查找文件工具。

    用法:find  [-H] [-L] [-P]  [-D debugopts]  [-Olevel]  [starting-point…]   [expression]

 

    ⑴ -H -L -P -D -Olevel

    -H -L -P都是对symbolic links操作的选项(symbolic links类似于windows下的桌面快捷方式)。

    -D 是选择性打印一些find的查询信息

    -Olevel 是进行一些查询优化,有查询等级的划分

 

    ⑵ starting-point:开始搜寻的目录

 

    ⑶ expression:是查找规则,其中分为Tests、Actions、Global options、Positional options、Operators。

   具体的可以man find一下。

 

2  一些常用的expression选项

    -name filename :

    检索匹配指定文件名的所有文件。其中,指定的文件名不必包括目录路径(从当前目录开始,递归的进行检索所有子目录)。

    filename可以是单、双引号括起来的通配符组成的字符串(这也说明了find工具,接受通配符,因为这个通配符不是由shell解析的,而是提交给find工具解析的)。

    [ex1] 递归查找当前目录下,所有后缀为.v的文件

find ./ -name ‘*.v’      #在当前目录下找所有后缀为.v的文件

    [ex2] 使用了命令的替换的形式,递归查找当前目录下的所有文件,并复制到./filedirectory目录下。

cp `find ./ *` ./filedirectory  
cp $(find ./ *) ./filedirectory

    -user username:

    检索其文件属主匹配指定用户的所有文件。

 

    -nouser

  检索其文件属主未出现在/etc/passwd文件中定义的所有文件。

 

    -atime  [+ -]n

    选择在n天之前,之内或恰好n天访问过的文件

    “+”表示在之外,“-”表示在之内,不写“+/-”表示恰好。下同↓↓↓↓

 

    -ctime  [+-]n

    选择在n天之前,之内或恰好n天状态信息发生变动的文件

 

    -mtime  [+-]n

    选择在n天之前,之内或恰好n天修改过文件内容的文件

 

    -mmin [+-]n

    选择在n分钟之前,之内或恰好n分钟 修改过文件内容的文件

find ./ -name '*.v' -mmin -30

    -size  [+-]n[cwbkMG]

    根据文件大小来进行选择。[cwbkMG]是对n的修饰,如果都不加,默认是n个512字节的数据块

            c :字节。表示n个字节

            w :双字节。表示n个双字节

            b :512字节的数据块(默认)

            k :KB为单位

            M :MB为单位

            G :GB为单位

 

    -newer filename

    选择其修改日期比给定的文件更近的文件

 

    -type filetype

    检索指定类型的文件

            f :普通文件

            d :目录

            b :块特殊文件

            c :字符特殊文件

            p :管道(FIFO)文件

            l :符号链接文件

            s :套接字文件

 

3  find命令的逻辑运算符

    find工具支持逻辑运算符。

   形式为:逻辑非“!”、逻辑或“-o”、逻辑与“-a”

    使用举例:

    ⑴ 逻辑非“!”

    find . ! -user root

   表示检索当前目录下,不属于root用户的文件

    ⑵ 逻辑或“-o”

    find /  \(-name  ‘*.o’  -o  -name  a.out \)  -atime +30

   表示检索根目录下超过30天没有访问的,文件扩展名为.o或者文件名为a.out的所有文件。

   “\(“转义字符加个特殊符号,防止shell对其进行了解析

    ⑶ 逻辑与“-a”

    find / -type d -a -user book

   表示检索根目录下的属于book用户的所有子目录

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值