簡體   English   中英

如何grep文件擴展名

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM