分享最新优惠信息
购买主机更加划算

Linux示例演示:删除文件夹中除某些扩展名之外的所有文件

在使用Linux系统的时候,有时可能会发现自己需要删除目录中的所有文件,或者只是通过删除除具有特定扩展名的文件(例如,以特定类型结尾的文件)之外的所有文件来清理目录。

那么,有没有什么好的方方法呢?实际上可以通过rm、find和globigore命令删除目录中的文件(同时排除某些特定文件类型) 。接下来将用一些示例进行演示,以帮助大家更好的理解。

在继续深入之前,首先需要了解一个在Linux中非常重要的概念——文件名模式匹配,这将更容易帮助我们解决当前的问题。在Linux系统中,Shell模式(Shell Pattern)是由以下特殊字符(称为通配符或元字符)组成的字符串:

  • *:匹配零个或多个字符
  • ?:匹配任意单个字符
  • [seq]:匹配seq序列中的任意字符
  • [!seq]– 匹配不在seq序列中的任意字符

接下来将介绍三种可能的方法,一起来看看吧。

一、使用扩展模式匹配运算符删除文件

扩展模式匹配运算符如下所示。在本例中,pattern-list 表示一个或多个文件名,文件名之间使用以下|字符分隔:

  • *(pattern-list):匹配零次或多次指定的模式
  • ?(pattern-list):匹配零次或一次指定的模式
  • +(pattern-list):匹配一次或多次指定模式的出现
  • @(pattern-list)– 匹配指定模式中的任意一个
  • !(pattern-list)– 匹配除指定模式之外的任何内容

要使用它们,请按如下方式启用extglob Shell选项,命令如下:

shopt -s extglob

1、要删除目录中除特定文件之外的所有文件,请输入以下命令:

rm -v !("filename")

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

2、删除除filename1filename2之外的所有文件,命令如下:

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

在Linux中删除除少数文件之外的所有文件

3、以交互方式删除除.zip文件之外的所有文件:

rm -i !(*.zip)

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

4、要删除除.zip.odt文件之外的所有文件,同时显示正在执行的操作:

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

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

在完成所有必要的命令操作后,可以像下面这样关闭extglob Shell选项:

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] {}

1、以下命令将会删除当前目录中除.gz文件之外的所有文件:

find . -type f -not -name '*.gz'-delete

命令find –删除除.gz文件之外的所有文件

2、使用管道和xargs,可以按如下方式修改上述情况:

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

使用find和xargs命令删除文件

3、最后再看一个示例,下面的命令将清除当前目录中除.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变量删除文件

注意要理解上述命令中使用的标志含义,请参考在各个示例中使用的每个命令的手册页。

小结

以上这些是在Linux中删除文件的几种简单有效的方法,能够保留只有特定扩展名或文件名的文件,使用起来相对比较简单。如果你需要删除除具有特定扩展名的文件,那么不妨试试以下方法。

未经允许不得转载:惠主机 » Linux示例演示:删除文件夹中除某些扩展名之外的所有文件