如何使用 find 命令忽略文件

How to ignore a file using find command

我正在尝试使用命令查找工件

问题是我在该目录中有 2 个工件

  1. build/libs/abc.jar
  2. build/libs/abc-plain.jar

我只想选择 abc.jar 个文件。

任何人都可以建议我如何实现这一目标吗?

find 命令支持标准的UNIX 正则表达式来匹配、包含或排除文件。您可以使用正则表达式轻松编写复杂的查询,同时发现该命令递归地下降列出的每个 /file/to/path 的目录树,评估表达式。

find命令可以与正则表达式一起使用,可以轻松获得任何类型的复杂搜索结果。工作原理:

  1. 您必须将 find 命令与 -regex 一起使用,而不是 -name
  2. 您必须生成匹配的正则表达式

如何find将文件名传递给正则表达式?

假设我们有以下目录结构:

/home/someone/build/libs/abc.jar
/home/someone/build/libs/abc-plain.jar

我们坐在 someone

如果我们在没有任何进一步参数的情况下执行 find .,我们得到:

./build/libs/abc.jar
./build/libs/abc-plain.jar

因此我们可以使用正则表达式搜索:

  1. 有些东西以一个点开头 .
  2. 文件名中可能有一些额外的路径
  3. 不应在任意数量的字符中包含 - 字符
  4. .jar
  5. 结尾

这导致:

  1. '.'
  2. '/*'
  3. '[^-]+'
  4. '.jar'

一起:

find . -regex '.*/[^-]+.jar'

或者如果您只想在 build/libs/

中搜索

find ./build/libs -regex '.*/[^-]+.jar'

你在那里找到 online regex tool

由于您没有明确提到您不想在文件名中使用连字符 -,因此我假设找到没有 -.

的文件

我会尝试这样的事情。将 lower-case、upper-case、数字和 .jar 扩展名与 regex 相匹配。

find build/libs/ -regextype posix-egrep -regex '.*/[a-zA-Z0-9]+\.jar'

我在本地测试时得到低于输出。

touch abc.jar
touch abc-plain.jar
find . -regextype posix-egrep -regex '.*/[a-zA-Z0-9]+\.jar'
./abc.jar

你可以试试上面的命令here