如何删除文件夹中的所有文件,除了某些扩展程序

有时,您可能会发现自己处于需要的情况或只需清除目录,除了具有特定扩展名的文件(例如,以特定类型结尾)以外的所有文件。

在本文中,我们将向您展示如何在目录中删除文件,不包括,使用,,,,, 和Globignore命令。

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

在Linux中,外壳模式是由以下特殊字符组成的字符串,称为通配符或者metacharacters

  • *- 匹配零或更多字符
  • ?- 匹配任何单个角色
  • [seq]- 匹配任何角色seq
  • [!seq]- 匹配任何不在中的角色seq

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

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

下面列出了扩展模式匹配操作员。在这种情况下,模式列表是指一个或多个文件名,使用|特点:

  • *(pattern-list)- 匹配指定模式的零或更多事件
  • ?(pattern-list)- 匹配指定模式的零或一次出现
  • +(模式列表)- 匹配指定模式的一个或多个出现
  • @(pattern-list)- 匹配指定模式之一
  • !(pattern-list)- 匹配除给定模式之一以外的任何东西

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

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外壳选项类似:

shopt -u extglob

使用Linux查找命令删除文件

在这种方法下,我们可以具有适当的选项或与通过采用以下表格中的管道:

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 {}
使用查找和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变量删除文件

笔记:要了解上面命令中使用的标志的含义,请参阅我们在各种插图中使用的每个命令的人页面。

结论

这些是在Linux中删除文件的几种简单有效的方法,仅保留具有特定扩展名或文件名完整的文件。如果您知道清理目录的其他有用的命令行技术,请随时在下面的“反馈”部分中分享它们。