我对 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"