建议阅读: 使用find命令来搜索Linux的多个文件名/扩展
在Linux中,一个shell模式是由下列特殊字符,它被称为 通配符或 元字符的字符串:*
-零个或多个字符匹配?
-匹配任何单个字符[seq]
-序列中的任何字符相匹配[!seq]
-匹配任何字符不是以次
使用扩展模式匹配操作符删除文件
的不同的扩展的模式匹配运算符如下,其中 图案列表是包含一个或多个文件名的列表中列出,使用分离|
字符:
*(pattern-list)
-零个或多个指定的模式相匹配?(pattern-list)
-匹配零次或一次指定模式- +(模式列表) -匹配指定模式的一次或多次出现
@(pattern-list)
-匹配指定的模式之一!(pattern-list)
-匹配任何东西,除了给定的模式之一
# shopt -s extglob1.要删除所有文件,除了文件名的目录中,键入以下命令:
$ rm -v !("filename")
在Linux中删除除一个文件之外的所有文件
$ rm -v !("filename1"|"filename2")
除了Linux中的少量文件之外,删除所有文件
.zip
交互文件:
$ rm -i !(*.zip)
删除除Linux中的Zip文件之外的所有文件
.zip
和
.odt
文件如下,同时显示正在做什么:
$ rm -v !(*.zip|*.odt)
删除除某些文件扩展名之外的所有文件
$ shopt -u extglob
使用Linux find命令删除文件
根据这种方法,我们可以 使用find命令只用适当的选项,或者与通过采用流水线如下形式 xargs的命令结合:$ find /directory/ -type f -not -name 'PATTERN' -delete $ find /directory/ -type f -not -name 'PATTERN' -print0 | xargs -0 -I {} rm {} $ find /directory/ -type f -not -name 'PATTERN' -print0 | xargs -0 -I {} rm [options] {}5.以下命令将从除了删除所有文件
.gz
在当前目录下的文件:
$ find . -type f -not -name '*.gz'-delete
命令查找 - 删除除了.gz文件之外的所有文件
$ find . -type f -not -name '*gz' -print0 | xargs -0 -I {} rm -v {}
使用find和xargs命令删除文件
.gz
,
.odt
和
.jpg
在当前目录下的文件:
$ find . -type f -not \(-name '*gz' -or -name '*odt' -or -name '*.jpg' \) -delete
除文件扩展名外,删除所有文件
使用Bash GLOBIGNORE变量删除文件
然而,最后一种方法,只适用于bash。在这里 ,GLOBIGNORE变量存储一个冒号分隔的模式列表(文件名)由路径扩展被忽略。建议阅读: 有用12实际的例子在grep命令在Linux中
采用这种方法,移动到您要清理的目录,然后设置 GLOBIGNORE变量,如下所示:$ cd test $ GLOBIGNORE=*.odt:*.iso:*.txt在这种情况下,比其他所有的文件
.odt
,
.iso
和
.txt
文件与从当前目录中删除。 现在运行命令清理目录:
$ rm -v *此后,关闭 GLOBIGNORE变量:
$ unset GLOBIGNORE
使用Bash GLOBIGNORE变量删除文件