实用的删除目录下部分类型之外的所有文件的三种方法


导读有的时候,你可能会遇到这种情况,你需要删除一个目录下的所有文件,或者只是简单的通过删除除了一些指定类型(以指定扩展名结尾)之外的文件来清理一个目录。

在这篇文章,我们将会向你展现如何通过rm find 和globignore 命令删除一个目录下除了指定文件扩展名或者类型的之外的文件。

在我们进一步深入之前,让我们开始简要的了解一下 Linux 中的一个重要的概念 —— 文件名模式匹配,它可以让我们解决眼前的问题。

在 Linux 下,一个 shell 模式是一个包含以下特殊字符的字符串,称为通配符或者元字符:

  1. * – 匹配 0 个或者多个字符
  2. ? – 匹配任意单个字符
  3. [序列] – 匹配序列中的任意一个字符
  4. [!序列] – 匹配任意一个不在序列中的字符

我们将在这儿探索三种可能的办法,包括:

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

下来列出了不同的扩展模式匹配操作符,这些模式列表是一个用 | 分割包含一个或者多个文件名的列表:

  1. *(模式列表) – 匹配 0 个或者多个出现的指定模式
  2. ?(模式列表) – 匹配 0 个或者 1 个出现的指定模式
  3. @(模式列表) – 匹配 1 个或者多个出现的指定模式
  4. !(模式列表) – 匹配除了一个指定模式之外的任何内容

为了使用它们,需要像下面一样打开 extglob shell 选项:

# shopt -s extglob

1. 输入以下命令,删除一个目录下除了 filename 之外的所有文件

$ rm -v !("filename")

实用的删除目录下部分类型之外的所有文件的三种方法实用的删除目录下部分类型之外的所有文件的三种方法

删除 Linux 下除了一个文件之外的所有文件

2. 删除除了 filename1 和 filename2 之外的所有文件

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

5. 下面的命令将会删除当前目录下除了 ".gz" 之外的所有文件

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

实用的删除目录下部分类型之外的所有文件的三种方法实用的删除目录下部分类型之外的所有文件的三种方法

find 命令 —— 删除 .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 变量存储了一个路径名展开pathname expansion功能的忽略模式(或文件名)列表,以冒号分隔。

为了使用这种方法,切换到要删除文件的目录,像下面这样设置 GLOBIGNORE 变量:

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

在这种情况下,除了 .odt、 .iso 和 .txt 之外的所有文件,都将从当前目录删除。

现在,运行如下的命令清空这个目录:

$ rm -v *

之后,关闭 GLOBIGNORE 变量:

$ unset GLOBIGNORE

实用的删除目录下部分类型之外的所有文件的三种方法实用的删除目录下部分类型之外的所有文件的三种方法

使用 bash 变量 GLOBIGNORE 删除文件

注:为了理解上面的命令行采用的标识的意思,请参考我们在每一个插图中使用的命令对应的 man 手册。

就这些了!如果你知道有实现相同目录的其他命令行技术,不要忘了通过下面的反馈部分分享给我们。





本文原创地址:http://www.linuxprobe.com/directory-under.html

免费提供最新Linux技术教程书籍,为开源技术爱好者努力做得更多更好:http://www.linuxprobe.com/thread



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
WinNc中文版是一款相当优秀且实用的windows平台上的专业文件管理器软件,简洁大方条理清晰功能完整足矣媲美大名鼎鼎的tc文件管理器,具备诸如重命名、查看、编辑、复制、删除、移动、新建等功能外,WinNc文件管理器软件还提供了统计目录大小和压缩解压缩以及文本比较、加密、编译、转化、刻录、分割、合并、同步和创建ISO镜像文件、自解压文件创建、文件同步、硬盘、CPU等使用率等方面的附加功能,WinNc中文版具有所有Windows 10特殊文件夹的快捷方式,并且选项卡式界面允许您按项目组织数据 WinNc文件管理器软件能让快速访问使文件管理更加容易,WinNc会跟踪用户过去使用过的文件夹,大家可以通过单击“快速访问”图标或按空格键来快速访问这些文件夹,然后在“快速访问”框中,开始键入感兴趣的位置,例如“ windows”或“ download”或“ projectfolder”,WinNc将显示按匹配等级排序的匹配文件夹列表,除此之外用户还可以通过按蓝色星号将常用文件夹设为收藏夹,还可以在实际文件夹中添加更多标签(搜索词)。 WinNc文件管理器软件使用逻辑颜色执行文件操作,因此用户可以查看文件是正在复制(绿色),正在移动(橙色)还是正在打包(黄色),WinNc允许用户通过将最大并行任务设置为多个任务来执行多个任务,否则WinNc文件管理器将等待开始新操作,直到上一个操作完成为止,有一个内置的文件查看器,支持所有流行的格式。它具有内置的幻灯片查看器,音频播放器和视频播放器,可快速浏览媒体。
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值