簡體   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