在Linux或Unix上如何批量删除包含数字的文件

时间:2019-11-20 08:53:49  来源:igfitidea点击:

在linux中,如何删除文件名中包含特殊字符或数字的文件?

解决方案

bash支持使用通配符(globbing)来匹配文件命令。
注意,通配符模式不是正则表达式。

Bash Shell支持以下通配符:

  • *: 匹配任何字符串
  • *a*: 匹配任何包含a的字符串
  • *9*: 匹配任何包含数字9的字符串
  • *.[xy]: 匹配任何以.x或.y结尾的字符串
  • *[ab]*: 匹配包含字符a或b的任何字符串
  • *[42]*: 匹配包含数字4或2的任何字符串
  • ?: 匹配任何单个字符

linux bash 通过通配符删除文件示例

查看所有.txt文件:

$ ls *.txt

查看文件名只有1个字符的txt文件

$ ls ?.txt

查看以大写字母开头的txt文件:

$ ls [A-Z]*.txt

删除文件名中包含数字4或2的文件:

$ ls *[42]*
$ rm -v *[42]*

bash shell的通配行为

使用shopt命令打开extglob:

$ shopt -s extglob

打开extglob以后:

复合模式可以使用以下一个或多个子模式组成:

      ?(pattern-list)
               匹配给定模式的零次或一次
      *(pattern-list)
               匹配给定模式的零次或多次
      +(pattern-list)
               匹配给定模式的一次或多次
       @(pattern-list)
               匹配给定的模式1次
       !(pattern-list)
               匹配除给定模式之外的任何模式

匹配以foo或bar开头的所有mp4和mov文件:

$ ls +(foo|bar)*+(.mp4|.mov)

匹配除png以外的所有文件:

$ ls -l !(*.png)

删除非gif文件

$ rm -v !(*.gif)