在Linux或Unix上如何删除文件名中包含字符或数字/数字的文件
时间:2020-01-09 14:17:03 来源:igfitidea点击:
在Linux或Unix bash shell提示符下,如何删除文件名中包含字符a或z或文件名中包含数字(例如4或2)的文件?
您需要使用rm命令删除命令行上指定的文件。
您需要使用称为globbing(通配符)的bash特殊功能来扩展文件名。
请注意,通配符模式不是正则表达式。
它们匹配并处理文件名,而不是文本。
Bash Shell支持以下通配符:
*
: 匹配任何字符串*a*
: 匹配任何包含a的字符串*9*
: 匹配任何包含数字9的字符串*.[xy]
: 匹配任何以.x或.y结尾的字符串*[ab]*
: 匹配包含字符a或b的任何字符串*[42]*
: 匹配包含数字4或2的任何字符串?
: 匹配任何单个字符
例子
让我们考虑以下文件:
$ ls -l
输出示例:
total 0 -rw-r--r-- 1 veryv wheel 0 Aug 24 01:37 001 -rw-r--r-- 1 veryv wheel 0 Aug 24 01:37 002 -rw-r--r-- 1 veryv wheel 0 Aug 24 01:39 1.txt -rw-r--r-- 1 veryv wheel 0 Aug 24 01:37 13 -rw-r--r-- 1 veryv wheel 0 Aug 24 01:37 13aa -rw-r--r-- 1 veryv wheel 0 Aug 24 01:37 42 -rw-r--r-- 1 veryv wheel 0 Aug 24 01:37 4213aa -rw-r--r-- 1 veryv wheel 0 Aug 24 01:42 A.txt -rw-r--r-- 1 veryv wheel 0 Aug 24 01:22 bar -rw-r--r-- 1 veryv wheel 0 Aug 24 01:39 c.txt -rw-r--r-- 1 veryv wheel 0 Aug 24 01:37 cd4213aa -rw-r--r-- 1 veryv wheel 0 Aug 24 01:37 file2.txt -rw-r--r-- 1 veryv wheel 0 Aug 24 01:37 file4.txt -rw-r--r-- 1 veryv wheel 0 Aug 24 01:37 file40.txt -rw-r--r-- 1 veryv wheel 0 Aug 24 01:22 foo -rw-r--r-- 1 veryv wheel 0 Aug 24 01:22 raj -rw-r--r-- 1 veryv wheel 0 Aug 24 01:22 sai -rw-r--r-- 1 veryv wheel 0 Aug 24 01:22 Hyman
要列出所有.txt文件,请运行:
$ ls *.txt `1.txt c.txt file2.txt file4.txt file40.txt`
查看带有1个字符名称的txt文件(例如z.txt,3.txt)
$ ls ?.txt `1.txt c.txt`
列出以大写字母开头的txt文件:
$ ls [A-Z]*.txt `A.txt`
您能猜出以下命令做什么吗?
$ ls [A-Za-z]*.txt `A.txt c.txt file2.txt file4.txt file40.txt`
您可以对任何Linux/Unix命令(例如rm命令,cp命令,mv命令,tar命令等)使用通配符。
要删除文件名中包含数字4或2的文件:
$ ls *[42]* $ rm -v *[42]*
限制为.jpg扩展名:
$ ls *[42]*.jpg $ rm -v *[42]*.jpg
另一个示例,文件名以大写的X开头,以.JPG扩展名结尾,并且文件名中包含数字4或2的文件:
$ ls X*[42]*.jpg $ rm -v X*[42]*.jpg
关于选项的说明,该选项会更改bash shell的通配行为
通过运行以下shopt命令打开extglob:
$ shopt -s extglob
从bash手册页:
Composite patterns may be formed using one or more of the following sub-patterns: ?(pattern-list) Matches zero or one occurrence of the given patterns *(pattern-list) Matches zero or more occurrences of the given patterns +(pattern-list) Matches one or more occurrences of the given patterns @(pattern-list) Matches one of the given patterns !(pattern-list) Matches anything except one of the given patterns
要查看以foo或bar开头的所有mp4和mov文件:
$ ls +(foo|bar)*+(.mp4|.mov)
要列出除* .mp4匹配的文件以外的所有文件,请执行以下操作:
$ ls -l !(*.mp4)
或删除除与* .gif文件匹配的文件以外的所有文件:
$ rm -v !(*.gif)