[英]How to grep for a file extension
我目前正在嘗試制作一個腳本,該腳本將 grep 輸入以查看某些文件是否屬於某種文件類型(例如 zip),盡管文件類型之前的文本可以是任何東西,例如
something.zip
this.zip
that.zip
都屬於該類別。 我正在嘗試使用通配符對這些進行 grep,到目前為止我已經嘗試過
grep ".*.zip"
但是每當我這樣做時,它會發現.zip
文件很好,但是如果.zip
之后還有其他字符,它仍然會顯示輸出,例如.zippppppp
或.zipdsjdskjc
仍然會被 grep 拾取。 話雖如此,我應該怎么做才能防止 grep 顯示在.zip
之后具有附加字符的匹配項?
用$
測試行尾並轉義第二個.
帶有反斜杠,因此它僅匹配句點而不匹配任何字符。
grep ".*\.zip$"
但是,如果要列出當前目錄中的所有.zip
文件或find . -name "*.zip"
.zip 文件,則ls *.zip
是一種更自然的方法。 -從當前目錄開始(包括)子目錄中的所有.zip
文件的名稱為find . -name "*.zip"
。
在 UNIX 上,嘗試:
find . -type f -name \*.zip
您還可以使用 grep 查找具有特定擴展名的所有文件:
find .|grep -e "\.gz$"
.
表示當前文件夾。 如果要指定當前文件夾以外的文件夾,只需替換.
與文件夾的路徑。 這是一個示例:讓我們查找以.gz
結尾且位於文件夾 /var/log 中的所有文件
find /var/log/ |grep -e "\.gz$"
輸出類似於以下內容:
✘ ⚙> find /var/log/ |grep -e "\.gz$"
/var/log//mail.log.1.gz
/var/log//mail.log.0.gz
/var/log//system.log.3.gz
/var/log//system.log.7.gz
/var/log//system.log.6.gz
/var/log//system.log.2.gz
/var/log//system.log.5.gz
/var/log//system.log.1.gz
/var/log//system.log.0.gz
/var/log//system.log.4.gz
$
符號表示文件擴展名以 gz 結尾
你需要做幾件事。 它應該如下所示:
grep '.*\.zip$'
您需要轉義第二個點,所以它只會匹配一個點,而不是任何字符。 使用單引號使轉義更容易一些。
您需要在行尾使用美元符號來表示您希望“zip”出現在行尾。
我使用它來獲取文件夾內文件類型的列表。
find . -type f | egrep -i -E -o "\.{1}\w*$" | sort -su
輸出例如:
.DS_Store
.MP3
.aif
.aiff
.asd
.doc
.flac
.jpg
.m4a
.m4p
.m4r
.mp3
.pdf
.png
.txt
.wav
.wma
.zip
獎金:與
find . -type f | egrep -i -E -o "\.{1}\w*$" | sort | uniq -c
您將獲得文件數:
106 .DS_Store
35 .MP3
89 .aif
5 .aiff
525 .asd
1 .doc
60 .flac
48 .jpg
149 .m4a
11 .m4p
1 .m4r
12844 .mp3
1 .pdf
5 .png
9 .txt
108 .wav
44 .wma
2 .zip
試試: grep -o -E "(\\.([Az])+)+"
我用它來獲得多點/多擴展。 因此,如果輸入是hello.tar.gz
,那么它將輸出.tar.gz
。 對於單點,使用grep -o -E "\\.([Az])+$"
。 在 Cygwin/MingW+MSYS 上測試。
上述示例的另一個修復/插件:
# multi-dotted/multiple extensions
grep -oEi "(\\.([A-z0-9])+)+" file.txt
# single dotted
grep -oEi "\\.([A-z0-9])+$" file.txt
這將獲得文件擴展名,如“.mp3”等。
如果您只想在當前文件夾中查找,為什么不用這個沒有 grep 的簡單命令呢?
ls *.zip
只是回顧一些其他的答案。 .*
不是必需的,如果您正在尋找某個文件擴展名,最好包含 -i 以便它不區分大小寫; 例如,如果文件是 HELLO.ZIP。 我也不認為引號是必要的。
grep -i \.zip$
grep -r pattern --include="*.txt" /path/to/dir/
只需這樣做:
grep ".*.zip$"
“$”表示行尾
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.