• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell
您的位置:首页 > 脚本语言 >linux shell > 使用bash shell删除目录中的特定文件的3种方法

使用bash shell删除目录中的特定文件的3种方法

作者:junjie 字体:[增加 减小] 来源:互联网

junjie 通过本文主要向大家介绍了bash shell,bash shell是什么,bash shell教程,win10 bash shell,linux bash shell等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

我是一名Linux新用户。现在我需要清理一个下载目录中的文件,其实我就是想从~/Download/文件夹删去除了以下格式的文件外所以其它文件:

1.*.iso - 所有的iso格式的文件。
2.*.zip - 所有zip格式的文件。

我如何在一个基于Linux,OS X 或者 Unix-like 系统上的bash shell中删除特定的文件呢?

Bash shell 支持丰富的文件模式匹配符例如:

1.* - 匹配所有的文件。
2.? - 匹配文件名中的单个字母。
3.[...] - 匹配封闭括号中的任何一个字母。

策略 #1: 见识一下扩展的模式匹配符

这里你需要用系统内置的shopt命令来开启shell中的extglob选项,然后你就可以使用扩展的模式符了,这些模式匹配符如下:

1.?(模式列表) - 匹配零次或一次给定的模式。
2.*(模式列表) - 匹配零次或多次给定的模式。
3.+(模式列表) - 至少匹配一次给定的模式。
4.@(模式列表) - 匹配一次给定的模式。
5.!(模式列表) - 不匹配给定模式。

一个模式列表就是一个或多个用 | 分开的模式(文件名)。

首先要打开extgolb选项:

在Bash中删掉除.zip和.iso文件以外的所有文件
rm 命令的语法格式为:
## 仅保留 file1 文件 ##
rm  !(file1)
 
## 仅保留 file1 和 file2 文件##
rm  !(file1|file2)
 
## 仅保留 zip 文件 ##
rm  !(*.zip)
 
## 仅保留 zip 和 iso 文件 ##
rm  !(*.zip|*.iso)
 
## 你也可以使用完整的目录 ##
rm /Users/vivek/!(*.zip|*.iso|*.mp3)
 
## 也可以传递参数 ##
rm [选项]  !(*.zip|*.iso)
rm -v  !(*.zip|*.iso)
rm -f  !(*.zip|*.iso)
rm -v -i  !(*.php)
</div>

策略 #2: 使用bash的 GLOBIGNORE 变量删除指定文件以外的所有文件

摘自 bash(1) 手册页:
这是一个用冒号分开的模式列表,通过路径展开方式定义了要忽略的文件集合。如果一个匹配到路径展开模式的文件也匹配GLOBIGNORE中的模式,那么它会从匹配列表中移除。</div>

要删除所有文件只保留 zip 和 iso 文件,应如下设置 GLOBIGNORE:
## 只在 BASH 中可行 ##
cd ~/Downloads/
GLOBIGNORE=*.zip:*.iso
rm -v *
unset GLOBIGNORE</div>

策略 #3: 用 find 命令删除所有其它文件仅保留 zip 和 iso 文件

如果你正在使用 tcsh/csh/sh/ksh 或者其它shell,你可以在Unix-like系统上试着用下面find命令的语法格式来删除文件:
find /dir/ -type f -not -name '匹配模式' -delete</div>
或者
## 对于怪异的文件名可以使用 xargs ##
find /dir/ -type f -not -name '匹配模式' -print0 | xargs -0 -I {} rm {}
find /dir/ -type f -not -name '匹配模式' -print0 | xargs -0 -I {} rm [选项] {}</div>

想要删除 ~/source 目录下除 php 以外的文件,键入:
find ~/sources/ -type f -not -name '*.php' -delete</div>
或者
find ~/sources/ -type f -not -name '*.php' -print0 | xargs -0 -I {} rm -v {}</div>
只保留 *.zip 和 *.iso 文件的语法如下:
find . -type f -not \( -name '*zip' -or -name '*iso' \) -delete</div>

</div>

您可能想查找下面的文章:

  • bash判断文件或文件夹是否存在的shell代码
  • 使用Bash Shell检查文件是否存在的方法
  • Bash中数组的操作教程
  • Bash Shell中的select命令简单使用示例
  • 使用Bash Shell获取文件名和目录名的简单方法
  • 使用Bash Shell对目录中的文件实现递归式拷贝
  • Linux bash Shell中的变量类型详解
  • Bash Shell中忽略大小写的设置方法
  • Shell 编程:Bash空格的那点事
  • Bash Shell 注释多行的几种方法

相关文章

  • 使用shell脚本采集系统cpu、内存、磁盘、网络等信息
  • 解压rpm包的linux命令及rpm命令使用简介
  • 一个监控Squid运行进程数并自动重启的简洁Shell脚本分享
  • Shell脚本实现批量下载网络图片代码分享
  • linux查看目录的四种方法(ls只显示目录)
  • shell中嵌套执行expect命令实例
  • Shell最多支持多少个参数?
  • Linux du命令查看文件夹大小并按降序排列
  • linux shell实现获取用户输入指定范围的单个字符的两种方法
  • Shell脚本中通过正则表达式匹配IP地址

文章分类

  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell

最近更新的内容

    • nginx 下安装配置 phpadmin报错的解决方法
    • Linux rpm命令参数使用大全(经典)
    • 创建Linux系统服务的方法
    • 查看某时间段到现在的系统日志的sed命令
    • Linux shell脚本中字符串连接的方法
    • 监控网站是否可以正常打开的Shell脚本分享
    • 一键备份gitolite服务器的Shell脚本
    • Shell中的变量使用小结
    • shell脚本实现文件锁功能
    • 一句话Shell命令关闭不需要的随机启动服务

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有