如何在 Linux 或 Unix 上删除文件名中包含字符或数字的文件
您需要使用 rm 命令来删除命令行中指定的文件。您需要使用 bash 的特殊功能(称为 globbing(“通配符”))来扩展文件名。
请注意,通配符模式不是正则表达式。它们匹配并作用于文件名,而不是文本。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 vivek
列出所有 .txt 文件运行:
查看名称为 1 个字符的 txt 文件(例如 z.txt、3.txt)
列出以大写字母开头的 txt 文件:
您能猜出以下命令的作用吗?
您可以将通配符与任何 Linux/Unix 命令一起使用,例如 rm 命令、cp 命令、mv 命令、tar 命令等。 删除文件名中包含数字“4”或“2”的文件:
限制为 .jpg 扩展名:
另一个示例是文件名以大写“X”开头并以 .JPG 扩展名结尾,并且文件名中包含数字“4”或“2”的文件:
$ ls *.txt
1.txt c.txt file2.txt file4.txt file40.txt
$ ls ?.txt
1.txt c.txt
$ ls [A-Z]*.txt
A.txt
$ ls [A-Za-z]*.txt
A.txt c.txt file2.txt file4.txt file40.txt
$ ls *[42]*
$ rm -v *[42]*
$ ls *[42]*.jpg
$ rm -v *[42]*.jpg
$ 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)
有关更多信息,请参阅 shell 手册页:
$ man bash
$ man ksh