使用find命令查找多个文件名,多种方法

博客围绕打包时查找对应class文件的场景展开,介绍了避免多余或缺少获取类的方法。还提及表达式默认是与关系,以及查找两种或以上扩展名文件时需用或关系,如查找当前目录下以.gz和.log结尾的文件。

场景描述:
打包过程中,有个场景就是要找到对应的class文件,但在java编译成class文件时会遇到一些内部类的情况,做到不多余获取类也缺少类
比如说这样的要找到

[root@localhost this]# ll
total 0
-rw-r--r--. 1 root root 0 May 30 16:37 Test$1.class
-rw-r--r--. 1 root root 0 May 30 16:37 TestC.class
-rw-r--r--. 1 root root 0 May 30 16:37 Test.class
[root@localhost this]# 

同过Test.java文件找到Test.class、Test$1.class但排除掉TestC.class,我找到的方法

#这个肯定会查出多余的文件
[root@localhost this]# find . -name  "Test*"
./Test.class
./TestC.class
./Test$1.class
# 这样才能查到合适文件
[root@localhost this]# find . -name  "Test.class" -or -name "Test$"*
./Test.class
./Test$1.class
#或者这样
[root@localhost this]#  find . -type f -iname "Test.class" -o -iname "Test$"*   
./Test.class
./Test$1.class
#或者这样
[root@localhost this]#  find . -type f \( -name "*Test.class" -o -name  "Test$"* \)
./Test.class
./Test$1.class
[root@localhost this]# 

展示的方式有很多种,当时使用时只找到了一种方式,所以学知识要活学活用

2.11 Combining Primaries With Operators
=======================================

Operators build a complex expression from tests and actions.  The
operators are, in order of decreasing precedence:

'( EXPR )'
     Force precedence.  True if EXPR is true.

'! EXPR'
'-not EXPR'
     True if EXPR is false.  In some shells, it is necessary to protect
     the '!' from shell interpretation by quoting it.

'EXPR1 EXPR2'
'EXPR1 -a EXPR2'
'EXPR1 -and EXPR2'
     And; EXPR2 is not evaluated if EXPR1 is false.

'EXPR1 -o EXPR2'
'EXPR1 -or EXPR2'
     Or; EXPR2 is not evaluated if EXPR1 is true.

表达式之间默认是与的关系,如-name .c -name path,符合条件的应该是path*.c的文件。

有时候可能会遇到一条命令想查找两个格式的文件,这个时候就需要用到或关系了。

find -name *.c -or -name *.h

适用于查找两种或以上扩展名文件
查找前目录下的所有.gz和.log结尾的文件

当前目录文件列表

[root@test test1]# ll
总用量 0
-rw-r--r-- 1 root root 0 4月  24 10:58 1
-rw-r--r-- 1 root root 0 4月  26 12:28 1.gz
-rw-r--r-- 1 root root 0 4月  26 12:28 1.gz.log
-rw-r--r-- 1 root root 0 4月  24 10:58 2
-rwxr-xr-x 1 root root 0 4月  26 12:53 c

#使用命令

# 使用-o
[root@test test1]# find . -type f \( -name "*.gz" -o -name "*.log" \)
./1.gz.log
./1.gz
[root@test test1]# find . -type f -iname "*.log" -o -iname "*.gz"            
./1.gz.log
./1.gz
# 使用默认的正则方式
[root@test test1]# find . -type f -regex '.*\(\.gz\|\.log\)'
./1.gz.log
./1.gz
# 采用posix-extended正则
[root@test test1]#  find . -type f -regextype posix-extended -regex '.*.(log|gz)'
./1.gz.log
./1.gz

原文:https://blog.youkuaiyun.com/remme123/article/details/41724159
https://blog.51cto.com/xoyabc/2108052

<think>好的,用户的问题是关于使用find命令递归查找某个文件名。首先,我需要回忆find命令的基本用法,特别是递归查找的部分。因为find默认就是递归搜索当前目录及其子目录的,所以关键点在于如何指定要查找文件名模式。 首先,用户可能需要查找精确匹配的文件名,这时候可以用-name选项。例如,查找名为"example.txt"的文件,命令应该是find /path/to/search -name "example.txt"。这里/path/to/search是要搜索的起始目录,如果是当前目录可以用.代替。 另外,用户可能需要模糊匹配,比如查找所有以.txt结尾的文件,这时候可以用通配符,命令find . -name "*.txt"。-name选项是大小写敏感的,如果需要不区分大小写,可以使用-iname选项,比如find . -iname "Example.TXT"会匹配各种大小写组合的文件名。 还需要注意,find命令的基本结构是find [路径] [表达式],其中表达式由选项和测试组成。递归是默认行为,所以不需要额外参数,除非用户想限制递归深度,但通常用户的问题是关于递归查找,所以默认情况已经满足。 可能用户还会遇到的情况是查找目录而不是文件,这时候需要用-type d选项,而-type f则是文件。但用户的问题是关于文件名,所以可能主要关注-name和-iname的使用。 总结,回答应该包括基本用法(-name)、模糊匹配(通配符)、不区分大小写(-iname)以及示例,确保用户能理解如何正确使用find命令进行递归查找文件名。 接下来需要生成相关问题,应该围绕find命令的其他选项、常见应用场景或可能的问题。例如,如何限制查找深度,如何同时查找多个文件名,如何仅查找文件或目录,如何忽略某些目录,或者如何在查找时执行操作(如删除)。这些问题能帮助用户进一步理解和扩展使用find命令。 </think>使用`find`命令递归查找某个文件名时,默认会递归搜索指定目录下的所有子目录。常用参数及示例如下: ### 基本语法 ```bash find [搜索路径] [匹配条件] ``` ### 关键参数说明 - `-name "文件名模式"`:按文件名精确或模糊匹配(大小写敏感)。 - `-iname "文件名模式"`:按文件名匹配(不区分大小写)。 ### 示例 1. 精确查找当前目录(含子目录)下名为`example.txt`的文件: ```bash find . -name "example.txt" ``` 2. 模糊查找当前目录下所有以`.log`结尾的文件(如`app.log`、`2023.log`): ```bash find . -name "*.log" ``` 3. 不区分大小写查找`ReadMe.md`(如匹配`README.MD`、`readme.md`等): ```bash find /home/user -iname "ReadMe.md" ``` ### 说明 `find`命令默认递归搜索子目录,无需额外参数;若需限制递归深度(如仅搜索当前目录下的1层子目录),可使用`-maxdepth`参数(如`find . -maxdepth 2 -name "file.txt"`)。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值