linux的find命令详解

本文详细介绍Linux下的find命令使用方法,包括各种查找选项、条件组合及动作执行。覆盖名称、属主、类型、大小、时间戳及权限等查找条件。
find命令是用来在给定的目录下查找符合给定条件的文件
  find [OPTIONS] [查找起始路径] [查找条件] [处理动作]
 
  一、OPTIONS参数
    -P、-L、-H:控制软连接的对待方式,用的不多。不介绍了
 
  二、查找路径
    就是个目录路径,相对和绝对都可以。
 
  三、查找条件
    (一)、根据名称查找
      -name "PATERN"
      -iname "PATERN" :不区分名称字母大小写
      
 
      -regex PATTERN:基于正则表达式的模式查找,匹配的是整个路径,而非单个文件名。
      
 
    (二)、根据文件从属关系查找:
        -user USERNAME:查找属主指定用户的所有文件;
        -group GRPNAME:查找属组指定组的所有文件;
 
        -uid UID:查找属主指定的UID的所有文件;
        -gid GID:查找属组指定的GID的所有文件;
 
        
 
        -nouser:查找没有属主的文件;
        -nogroup:查找没有属组的文件;
        
    (三)、根据文件的类型查找:
      -type:根据不同的文件类型筛选
f普通文件
d目录文件
l符号链接文件
b块设备 文件
c字符设备文件
p管道文件
s套接字文件
 
            
 
    (四)、根据文件的大小查找:
        -size [+|-]#UNIT
          常用单位:k, M, G
            #UNIT:(#-1, #]
            -#UNIT:[0,#-1]
            +#UNIT:(#, oo)
            
            1、1k时:a3只有15个字节,也被算做1k也查询,即条件符合大于0k ( #-1 ),小于等于1k (#)
            2、+1k时:a和a1满足大于1k(#)的条件
            3、-62k时:只有a3满足大于等于0,小于等于 61k(#-1)的要求。
 
    (五)、 根据时间戳查找:
        按照atime(文件的最后访问时间)、mtime(文件的最后修改时间)、ctime(文件最后改变时间)三个变量来查询:
          以天为单位,
          -atime [+|-]#
              #:[#, #-1) :最后访问时间在#天前(大于等于#天前,小于#-1天前)
                    等价于最后访问时间与当前的时间差 大于 (#-1)*24小时,小于等于 #*24小时
              -#:(#, 0] :最后访问时间在#天以内,不包括24小时前的那一刻。
                    等价于最后访问时间与当前的时间差小于 #*24小时
              +#:(oo, #-1] :最后访问时间在#-1天以前的。包括#-1天前
                    等价于最后访问时间与当前的时间差大于等于 #*24小时
                  -mtime
                  -ctime
 
      
 
    以“分钟”为单位:
        -amin
        -mmin
        -cmin
 
    -daystart:时间条件的开始先决条件。如果没有的时候,比较的开始时间为当前时间。如果有此参数,则比较的开始时间为当天的23:59:59。
    
 
    查询出来的各个文件名称对应时间如下:
    
 
文件名修改时间
服务器当前时间09/08 17:34
a09/08 17:20
b09/07 12:20
c09/08 13:20
d09/07 22:20
 
    
 
    
 
 
    (六)、根据权限查找
        -perm
        -perm [/|-]mode
          mode:精确权限匹配;
          /mode:任何一类用户(u,g,o)的权限中的任何一位(r,w,x)符合条件即满足;9位权限之间存在“或”关系;
          -mode:每一类用户(u,g,o)的权限中的每一位(r,w,x)同时符合条件即满足。9位权限之间存在“与”关系;
          看案例:
          
            
          (1):精确查找。就是匹配权限值完全相等的;
          
 
          (2):/mode。 只要有一组用户匹配到一个权限即可。
          通俗说:就是属主拥有给定属主权限的某一个,或者数组拥有给定权限的某一个,或者其他用户拥有给定权限的某一个即可。
          
          表示属主拥有执行权限
          或者数组拥有写权限,
          或者其他用户拥有写权限
 
          (3):-mode。并且的关系。
          通俗说:就是给定的属主权限必须拥有。并且给定的数组权限必须拥有。并且给定的其他用户权限必须拥有。
 
          
          表示属主拥有执行权限
          并且数组拥有写权限,
          并且其他用户拥有写权限
 
        处理动作:
          -print:输出至标准输出;默认的动作;
          -ls:类似于对查找到的文件执行“ls -l”命令,输出文件的详细信息;
          -delete:删除查找到的文件;
          -fls /PATH/TO/SOMEFILE:把查找到的所有文件的长格式信息保存至指定文件中;
          -ok COMMAND {} \; :对查找到的每个文件执行由COMMAND表示的命令;每次操作都由用户进行确认;
          -exec COMMAND {} \; :对查找到的每个文件执行由COMMAND表示的命令;
 
          注意:find传递查找到的文件路径至后面的命令时,是先查找出所有符合条件的文件路径,并一次性传递给后面的命令;
 
            但是有些命令不能接受过长的参数,此时命令执行会失败;另一种方式可规避此问题:
             find | xargs COMMAND

转载于:https://www.cnblogs.com/scrit/p/5854197.html

<think> 我们根据用户的要求,需要提供Linux系统中find命令的详细解释和使用说明。参考之前的引用内容,我们可以整理出以下信息: 1. find命令的基本功能:在指定目录下查找文件和目录。 2. 基本语法:`find [路径] [选项] [表达式]` 3. 如果没有指定路径,默认在当前目录及其子目录下查找。 4. 常用选项和表达式: - `-name`:按文件名查找 - `-type`:按文件类型查找(f表示文件,d表示目录等) - `-maxdepth`:限制搜索深度 - 逻辑运算符:`-a`(与),`-o`(或),`!`或`-not`(非) - 其他条件:权限、用户、组、时间、大小等 此外,我们还可以补充一些常用的用法和高级用法。 下面我们将详细说明find命令的使用。 ### 一、基本语法 ```bash find [搜索路径] [选项] [表达式] ``` ### 二、常用选项 1. **按文件名查找 (-name)** - 查找当前目录及其子目录下所有以.txt结尾的文件: ```bash find . -name "*.txt" ``` - 注意:文件名模式要用引号括起来,防止shell扩展。 2. **按文件类型查找 (-type)** - 查找当前目录下的所有目录: ```bash find . -type d ``` - 常用类型: - `f`:普通文件 - `d`:目录 - `l`:符号链接 3. **限制搜索深度 (-maxdepth, -mindepth)** - 只在当前目录(不进入子目录)查找: ```bash find . -maxdepth 1 -name "*.txt" ``` - 查找深度至少为2的目录(即至少包含一级子目录): ```bash find . -mindepth 2 -type f ``` 4. **按时间查找** - `-atime`:访问时间(天) - `-mtime`:修改时间(天) - `-ctime`:状态改变时间(天) - 查找7天内被访问过的文件: ```bash find . -atime -7 ``` - 注意:`-7`表示7天以内,`+7`表示7天以前。 5. **按大小查找 (-size)** - 查找大于1MB的文件: ```bash find . -size +1M ``` - 单位:`c`(字节),`k`(千字节),`M`(兆字节),`G`(吉字节) 6. **逻辑运算符** - 与(-a,默认可以省略): ```bash find . -name "*.txt" -type f ``` - 或(-o): ```bash find . -name "*.txt" -o -name "*.sh" ``` - 非(! 或 -not): ```bash find . ! -name "*.txt" ``` ### 三、执行操作 find命令可以对查找到的文件执行操作,使用`-exec`或`-ok`(询问确认)。 - 删除当前目录下所有.txt文件: ```bash find . -type f -name "*.txt" -exec rm {} \; ``` 其中,`{}`表示匹配到的文件名,`\;`表示命令结束。 - 也可以使用`-delete`选项直接删除(不需要`-exec`): ```bash find . -type f -name "*.txt" -delete ``` ### 四、其他常用选项 - **按权限查找 (-perm)** ```bash find . -perm 644 # 查找权限为644的文件 find . -perm /u=x # 查找用户有执行权限的文件 ``` - **按用户和组查找** ```bash find . -user root # 查找属主为root的文件 find . -group www # 查找属组为www的文件 ``` ### 五、高级用法 - **忽略大小写 (-iname)** ```bash find . -iname "*.TXT" # 匹配.txt, .TXT等 ``` - **结合xargs** 当处理大量文件时,使用`xargs`可以提高效率: ```bash find . -name "*.log" | xargs rm ``` 但注意,如果文件名包含空格或特殊字符,推荐使用`-print0`和`xargs -0`: ```bash find . -name "*.log" -print0 | xargs -0 rm ``` ### 六、注意事项 1. 在使用`-exec`或`-delete`等有破坏性的操作时,建议先运行不加这些操作的命令确认结果。 2. 当使用通配符时,使用引号避免shell提前展开。 通过上述说明,用户可以全面了解find命令的使用方法。下面我们生成相关问题。 </think> ### Linux `find` 命令详细使用说明 `find` 是 Linux/Unix 系统中用于**递归搜索文件和目录**的核心工具,支持丰富的过滤条件和操作。以下是详细说明: --- #### **一、基础语法** ```bash find [搜索路径] [选项] [表达式] ``` - 若省略路径,默认从当前目录递归搜索 - 表达式支持逻辑组合(`-a` 与, `-o` 或, `!` 非) --- #### **二、核心功能** 1. **按名称搜索** ```bash find /home -name "*.txt" # 搜索.txt文件(区分大小写) find . -iname "*.PDF" # 忽略大小写搜索 ``` 2. **按类型过滤** ```bash find /var -type f # 只搜文件 find ~ -type d # 只搜目录 find . -type l # 只搜符号链接 ``` > 类型标识:`f`=文件, `d`=目录, `l`=软链接, `b`=块设备 3. **限制搜索深度** ```bash find . -maxdepth 1 -name "*.log" # 仅当前目录(不递归) find /etc -mindepth 2 -type f # 至少2层子目录 ``` 4. **按时间筛选** ```bash find /tmp -mtime -7 # 7天内修改的文件 find ~ -atime +30 # 30天前访问的文件 ``` > `-mtime`=修改时间, `-atime`=访问时间, `-ctime`=状态变更时间 > `+n`=n天前, `-n`=n天内 5. **按大小过滤** ```bash find /var -size +10M # >10MB的文件 find . -size -100k # <100KB的文件 ``` > 单位:`c`=字节, `k`=KB, `M`=MB, `G`=GB --- #### **三、高级用法** 1. **逻辑组合筛选** ```bash find . \( -name "*.sh" -o -name "*.py" \) ! -user root # 搜sh或py文件且非root用户 ``` 2. **权限过滤** ```bash find /etc -perm 644 # 精确匹配644权限 find . -perm /u=x # 用户有执行权限 ``` 3. **执行操作** ```bash find ~/Downloads -name "*.tmp" -delete # 删除临时文件 find /var/log -size +50M -exec rm {} \; # 删除>50MB日志 find . -type f -print0 | xargs -0 chmod 644 # 处理含空格文件名 ``` > `{}` 代表匹配的文件名,`\;` 结束命令 4. **处理特殊字符** ```bash find . -print0 | xargs -0 command # 安全处理空格/换行符文件名 ``` --- #### **四、实用示例** ```bash # 查找7天内修改的PHP文件并备份 find /var/www -name "*.php" -mtime -7 -exec cp {} {}.bak \; # 搜索空目录 find /data -type d -empty # 查找SUID权限文件 find / -perm /4000 -type f ``` --- #### **注意事项** 1. 对系统目录搜索需 `sudo` 权限 2. 破坏性操作(`-delete`, `-exec rm`)建议先用 `-print` 测试 3. 复杂条件用 `()` 明确优先级,如 `\( cond1 -o cond2 \) -a cond3` > 引用说明:搜索深度限制[^2]、逻辑运算符[^3]、基础功能[^1] ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值