繁体   English   中英

如何使用grep和regex查找目录中的所有文件?

[英]How to find all files in a Directory with grep and regex?

我在Apache服务器上有一个目录(Linux / Unix),其中有很多子目录包含很多这样的文件:

- Dir  
  - 2010_01/
    - 142_78596_101_322.pdf
    - 12_10.pdf
    - ...
  - 2010_02/   
    - ...

我怎样才能找到文件名看起来像的所有文件: *_*_*_*.pdf 其中*总是一个数字!!

我试着像这样解决它:

ls -1Rl 2010-01 | grep -i '\(\d)+[_](\d)+[_](\d)+[_](\d)+[.](pdf)$' | wc -l

但正则表达式\\(\\d)+[_](\\d)+[_](\\d)+[_](\\d)+[.](pdf)$不适用于grep。

编辑1 :尝试ls -l 2010-03 | grep -E '(\\d+_){3}\\d+\\.pdf' | wc -l ls -l 2010-03 | grep -E '(\\d+_){3}\\d+\\.pdf' | wc -l ls -l 2010-03 | grep -E '(\\d+_){3}\\d+\\.pdf' | wc -l例如只返回null。 所以它不完美

尝试使用find

满足您的规范的命令__*_*.pdf where * is always a digit

find 2010_10/ -regex '__\d+_\d+\.pdf'

您似乎想要一个由下划线分隔的4个数字的序列,但是,基于您尝试的正则表达式。

(\d+_){3}\d+\.pdf

或者您想匹配仅包含数字/下划线的所有名称?

[\d_]+\.pdf

首先,您应该使用egrep vs grep或使用-E调用grep来扩展模式。

这对我有用:

$ cat test2.txt
- Dir  
  - 2010_01/
    - 142_78596_101_322.pdf
    - 12_10.pdf
    - ...
  - 2010_02/   
    - ...

现在egrep那个文件:

cat test2.txt | egrep '((?:\d+_){3}(?:\d+)\.pdf$)'
- 142_78596_101_322.pdf

由于整个模式周围有括号,因此将捕获整个文件名。

请注意,在传统模式下,模式不适用于grep:

$ cat test2.txt | grep '((?:\d+_){3}(?:\d+)\.pdf$)'
... no return

但是,如果使用扩展模式开关(与调用egrep相同),则可以工作:

$ cat test2.txt | grep -E '((?:\d+_){3}(?:\d+)\.pdf$)'
- 142_78596_101_322.pdf 

感谢gbchaosmaster我找到了适合我的方法:

进入目录

find . | grep -P "(\d+_){3}\d+\.pdf" | wc -l

在根目录

find 20*/ | grep -P "(\d+_){3}\d+\.pdf" | wc -l

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM