如何grep文件扩展名

lac*_*991 17 regex bash grep

我目前正在尝试创建一个脚本,该脚本将grep输入以查看某些内容是否属于某种文件类型(例如zip),尽管文件类型之前的文本可能是任何内容,例如

something.zip
this.zip
that.zip
Run Code Online (Sandbox Code Playgroud)

都属于这个类别.我试图使用通配符grep这些,到目前为止,我已经尝试过这个

grep ".*.zip"
Run Code Online (Sandbox Code Playgroud)

但是每当我这样做时,它会发现.zip文件很好,但是如果在.zip例如之后还有其他字符,它仍会显示输出,.zippppppp或者.zipdsjdskjc仍然会被grep拾取.话虽如此,我应该怎么做才能防止grep显示具有附加字符的匹配.zip

Chr*_*our 54

使用反斜杠测试行结束$.使用反斜杠转义第二行,这样它只匹配句点而不是任何字符.

grep ".*\.zip$"
Run Code Online (Sandbox Code Playgroud)

但是,ls *.zip如果要列出.zip当前目录find . -name "*.zip"中的所有.zip文件或从当前目录开始(包括)当前子目录中的所有文件,则这是一种更自然的方法.

  • grep“ \ .zip”怎么样 (2认同)
  • grep 命令中第一个点的作用是什么? (2认同)

Stu*_*ent 14

在UNIX上,尝试:

find . -name \*.zip -print
Run Code Online (Sandbox Code Playgroud)


ind*_*out 6

我用它来获取文件夹内文件类型的列表。

find . -type f | egrep -i -E -o "\.{1}\w*$" | sort -su
Run Code Online (Sandbox Code Playgroud)

输出例如:

.DS_Store
.MP3
.aif
.aiff
.asd
.doc
.flac
.jpg
.m4a
.m4p
.m4r
.mp3
.pdf
.png
.txt
.wav
.wma
.zip
Run Code Online (Sandbox Code Playgroud)

奖金:与

find . -type f | egrep -i -E -o "\.{1}\w*$" | sort | uniq -c
Run Code Online (Sandbox Code Playgroud)

您将获得文件计数:

    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
Run Code Online (Sandbox Code Playgroud)


Vau*_*ato 5

你需要做几件事.它应该如下所示:

grep '.*\.zip$'
Run Code Online (Sandbox Code Playgroud)

你需要转义第二个点,所以它只匹配一个点,而不是任何字符.使用单引号使转义更容易一些.

您需要该行末尾的美元符号表示您希望在该行的末尾出现"zip".


Str*_*ker 5

您还可以使用 grep 查找具有特定扩展名的所有文件:

find .|grep -e "\.gz$"
Run Code Online (Sandbox Code Playgroud)

.指当前文件夹。如果要指定当前文件夹以外的文件夹,只需将 替换.为文件夹的路径即可。这是一个例子:让我们找到所有以.gz/var/log结尾的文件

  find /var/log/ |grep -e "\.gz$"
Run Code Online (Sandbox Code Playgroud)

输出类似于以下内容:

 ? ?> 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
Run Code Online (Sandbox Code Playgroud)

$标志基本上表明文件扩展名以 gz 结尾