Shell中删除某些文件外所有文件的3个方法

我的一位同事曾经问过我这样一个问题:在 Linux 下,如何 删除目录中除某些文件之外的所有文件?当时,我告诉他可 以通过模式匹配的方法解决。但其实,除此之外,还有其他 的方法,正所谓“条条大路通罗马”。让我们来逐一看看。

假设要删除 ~/Downloads 目录中除 *.iso 和 *.zip 外的 所有文件,那么在 bash 中可以按以下方法处理:

方法1:模式匹配法

代码如下:

shopt -s extglob # 确认开启 extglob 选项
cd ~/Downloads
rm -v !(*.iso|*.zip)
!(pattern list) 的作用是匹配除 pattern list 之外 的文件。

方法2:设置变量法

在 bash 中,GLOBIGNORE 可用来设置要忽略的模式匹配 文件,多个模式通过 : 分隔。

代码如下:

cd ~/Downloads
export GLOBIGNORE=*.zip:*.iso
rm -v *
unset GLOBIGNORE

方法3:find 搜索法

熟悉 find 的朋友想必知道,find 的威力异常强大,因此 利用它也可解决此问题。

代码如下:

cd ~/Downloads
find . -type f -not \( -name '*.zip' -or -name '*.iso' \) -delete

不过还是要提醒大家,rm 操作是非常危险的,切勿炫技,如果你不放心,那么可以先老老实实的逐个或分批删除,也要比事后找回方便的多。

(0)

相关推荐

  • shell备份文件、重命名文件、删除指定文件的3个脚本分享

    因为经常会用到shell脚本,所以经常会写一些,但是我从来没有系统的学习过shell脚本,遇到问题,就去看手册,或者google一下,到了一定的程度才发现自己的基础真的好差.下面在系统学习shell时,顺便写了点有用的小脚本. 1,备份目录下面文件 复制代码 代码如下: #!/bin/bash E_BADARGS=65 case $# in  //$#表示转入参数的个数,sh bak.sh ./ .sh 有二个参数./和.sh 0)                     // 参数为空时,提示

  • 利用shell删除数据表中指定信息和字段对应的文件

    利用mysql shell命令读取数据库信息,删除指定字段,以及字段对应的文件,适用Linux平台. 前面变量定义为数据基本配置 复制代码 代码如下: #!/bin/bash#Program#    delete the database'info whick state is 3#History:#  2014/2/23  cjp  First release#  2014/3/5/  cjp  change value'setting on 117PATH=/bin:/sbin:/usr/b

  • shell中删除文件中重复行的方法

    Linux下文本处理工具很丰富很强大,例如这样一个文件: 复制代码 代码如下: cat log www.jb51.net 192.168.1.1www.jb51.net 192.168.1.1www.jb51.net 192.168.1.2ffffffffffffffffffffffffffffffffffffeeeeeeeeeeeeeeeeeeeefffffffffffffffffffeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeggggggggggggggg

  • 聊聊PHP中删除字符串的逗号和尾部斜杠的方法

    正如标题所述,本文将给大家通过两个示例来介绍PHP删除字符串中的逗号以及尾部斜杠的方法,感兴趣的朋友咱们一起继续往下看吧~ 下面我们通过具体的实例分别讲解: 第一个示例的要求则是"编写一个PHP脚本以从指定的数字字符串中删除逗号". PHP示例代码如下: $str1 = "2,345.12"; $x = str_replace( ',', '', $str1); if( is_numeric($x)) { echo $x." "; } 运行结果如

  • shell中使用echo打印彩色字体和彩色背景的方法

    对于shell中的终端打印感觉很好玩! 首先知道shell中终端打印有echo printf一般常用的就是echo咯: 注:字体颜色 重置=0,黑色=30,红色=31,绿色=32, ***=33,蓝色=34, 洋红=35, 青色=36, 白色=37.  背景颜色 重置=0,黑色=40,红色=41,绿色=42, ***=43,蓝色=44, 洋红=45, 青色=46, 白色=47. 要打印彩色文本,可输入如下命令: 复制代码 代码如下: # echo -e "\e[1;36m \e[0m"

  • linux shell中curl 发送post请求json格式问题的处理方法

    今天在linux中使用curl发送一个post请求时,带有json的数据,在发送时发现json中的变量没有解析出来 如下 curl -i -X POST -H 'Content-type':'application/json' -d {"BTime":""$btime""} http://api.baidu.com 变量没有做解析 原来在shell中,"" '还是有很大区别的, 把修改后的curl发送贴出 atime=`dat

  • Shell中删除某些文件外所有文件的3个方法

    我的一位同事曾经问过我这样一个问题:在 Linux 下,如何 删除目录中除某些文件之外的所有文件?当时,我告诉他可 以通过模式匹配的方法解决.但其实,除此之外,还有其他 的方法,正所谓"条条大路通罗马".让我们来逐一看看. 假设要删除 ~/Downloads 目录中除 *.iso 和 *.zip 外的 所有文件,那么在 bash 中可以按以下方法处理: 方法1:模式匹配法 复制代码 代码如下: shopt -s extglob # 确认开启 extglob 选项 cd ~/Downlo

  • Shell定时删除指定时间之前的文件

    最近世界杯来了,一直忙于工作和世界杯之间,都没有空来管管我的blog了,今天只能整个简单的小shell给大家了.公司要求删除一个月之前的备份文件,免得把硬盘给整爆了,上服务器看了下,居然都有3个月的备份没有清理了,还好是sql备份,不然硬盘空间早就满了. 下面是我的解决办法: 复制代码 代码如下: cat delbak.sh #!/bin/sh location="/root/sqlbak/" find $location -mtime +30 -type f |xargs rm -f

  • SQL语句删除和添加外键、主键的方法

    --删除外键 语法:alter table 表名 drop constraint 外键约束名 如: alter table Stu_PkFk_Sc drop constraint FK_s alter table Stu_PkFk_SC drop constraint FK_c --添加外键 语法:alter table 表名 add constraint 外键约束名 foreign key(列名) references 引用外键表(列名) 如: alter table Stu_PkFk_Sc

  • Shell中去除字符串里的空格或指定字符的方法

    网上很多办法,虽然是对的,用起来结果不对.这里提供正确办法. 去掉开头的空格 $text=" 123 456 " # 这个写法,保证了得到正确的结果. text=`echo $text | sed -e 's/^[ \t]*//g'` # 这些方法没有测试,写法参照上面的. # 去掉尾巴的空格 sed 's/[ \t]*$//g' # 删除前.后空格,不删除中间空格 sed -e 's/^[ \t]*//g' -e 's/[ \t]*$//g' # 删除字符串中所有空格 sed 's/

  • Shell中创建序列和数组(list、array)的方法

    关于linux数组定义,以及生成方法,请看:linux shell 动态生成 数组系列 seq使用技巧 .这里我主要说的是高效生成list 字符串,还有数组方法. 一.seq方法生成: [chengmo@centos5 shell]$ aNumList=$(seq 100); [chengmo@centos5 shell]$ echo $aNumList 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27

  • PowerShell中删除空格、点号、减号和换行方法代码实例

    复制代码 代码如下: $text = ' ... Hello ...---  ' $text.Trim(" .-`t`n`r") 结果只显示:Hello

随机推荐