使用 awk 正则表达式和 gnu find

使用 awk 正则表达式和 gnu find

我对 AWK 正则表达式很熟悉,并希望在 GNU 中使用它们find。搜索find的手册页,我发现有两个选项称为-regex和,-regextype它们似乎很相关。

因此我尝试使用以下方法列出file目录中所有带前缀的文件,如下所示

[Desktop/test]$ tree .
.
├── bar
├── file1.pdf
├── file2.pdf
├── file3.pdf
└── foo

0 directories, 5 files
[Desktop/test]$ 

命令

[Desktop/test]$ find . -type f -name "*.pdf"
./file3.pdf
./file2.pdf
./file1.pdf

按预期工作。

但尝试

查找 . -type f -regextype awk -regex “文件”

没有输出(或错误)。第二次调用时我哪里出错了?


笔记

我在 Linux Mint 机器上使用以下版本的 find

find (GNU findutils) 4.7.0-git 版权所有 (C) 2016 Free Software Foundation, Inc. 许可证 GPLv3+:GNU GPL 版本 3 或更高版本 http://gnu.org/licenses/gpl.html。这是免费软件:您可以自由更改和重新分发它。在法律允许的范围内,不提供任何保证。

由 Eric B. Decker、James Youngman 和 Kevin Dalley 编写。启用的功能:D_TYPE O_NOFOLLOW(已启用)LEAF_OPTIMISATION FTS(FTS_CWDFD)CBO(level=2)

答案1

阅读find手册:

-正则表达式模式

文件名与正则表达式模式匹配。这是整个路径的匹配,而不是搜索。例如,要匹配名为 的文件./fubar3,可以使用正则表达式.*bar..*b.*3,但不能使用f.*r3。 find 理解的正则表达式默认是 Emacs 正则表达式(除了“。”匹配换行符),但可以使用 -regextype 选项进行更改。

所以你要

find . -type f -regextype awk -regex ".*\.pdf"

相关内容