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

场景描述:
打包过程中,有个场景就是要找到对应的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.csdn.net/remme123/article/details/41724159
https://blog.51cto.com/xoyabc/2108052

你可能感兴趣的:(linux,工具管理)