admin管理员组

文章数量:1660142

有时,你会遇到一种情况,你需要删除目录中的所有文件或只是清除目录,删除所有文件,除了给定类型的文件(以特定的扩展名结束)。

在本文中,我们将告诉你如何在目录中删除文件,除了某些文件扩展名或使用RM类型, 找到并GLOBIGNORE命令。

在我们进一步移动之前,让我们从简单地看一看Linux中的一个重要概念 - 文件名模式匹配,这将使我们能够处理我们的问题。

通配符或元字符的字符串:

* -零个或多个字符匹配

? -匹配任何单个字符

[seq] -序列中的任何字符相匹配

[!seq] -匹配任何字符不是以次

我们将在这里探讨三种可能的方法,包括:

使用扩展模式匹配操作符删除文件

的不同的扩展的模式匹配运算符如下,其中图案列表是包含一个或多个文件名的列表中列出,使用分离|字符:

*(pattern-list) -零个或多个指定的模式相匹配

?(pattern-list) -匹配零次或一次指定模式

+(模式列表) -匹配指定模式的一次或多次出现

@(pattern-list) -匹配指定的模式之一

!(pattern-list) -匹配任何东西,除了给定的模式之一

要使用它们,如下启用extglob shell选项:

# shopt -s extglob

1.要删除所有文件,除了文件名的目录中,键入以下命令:

$ rm -v !("filename")

在Linux中删除除一个文件之外的所有文件

2.要删除与文件名1和文件名2以外的所有文件:

$ rm -v !("filename1"|"filename2")

除了Linux中的少量文件之外,删除所有文件

3.下面的例子说明如何删除比所有其他所有文件.zip交互文件:

$ rm -i !(*.zip)

删除除Linux中的Zip文件之外的所有文件

4.接下来,你可以在一个目录中的所有删除所有文件除了.zip和.odt文件如下,同时显示正在做什么:

$ rm -v !(*.zip|*.odt)

删除除某些文件扩展名之外的所有文件

一旦你拥有所有必需的命令,关闭,像这样的extglob外壳选项:

$ 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文件之外的所有文件

6.使用管道和xargs的 ,您对上述修改如下情况:

$ find . -type f -not -name '*gz' -print0 | xargs -0 -I {} rm -v {}

使用find和xargs命令删除文件

7.让我们看一个额外的例子,下面的命令将消灭排除所有文件.gz , .odt和.jpg在当前目录下的文件:

$ find . -type f -not \(-name '*gz' -or -name '*odt' -or -name '*.jpg' \) -delete

除文件扩展名外,删除所有文件

使用Bash GLOBIGNORE变量删除文件

然而,最后一种方法,只适用于bash。在这里,GLOBIGNORE变量存储一个冒号分隔的模式列表(文件名)由路径扩展被忽略。

GLOBIGNORE变量,如下所示:

$ cd test

$ GLOBIGNORE=*.odt:*.iso:*.txt

在这种情况下,比其他所有的文件.odt , .iso和.txt文件与从当前目录中删除。

现在运行命令清理目录:

$ rm -v *

此后,关闭GLOBIGNORE变量:

$ unset GLOBIGNORE

使用Bash GLOBIGNORE变量删除文件

注意 :要了解上面的命令所使用的标志的含义,请参见我们在各种插图中使用的每个命令的手册页。

就这样!如果您有任何其他命令行技术为同一目的,不要忘记通过我们的反馈部分与我们分享以下。

本文标签: 文件扩展名几种方法方式计算机