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

我的一位同事曾经问过我这样一个问题:在 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 操作是非常危险的,切勿炫技,如果你不放心,那么可以先老老实实的逐个或分批删除,也要比事后找回方便的多。

时间: 2024-12-23 07:37:19

Shell中删除某些文件外所有文件的3个方法_linux shell的相关文章

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

对于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&q

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

关于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

linux shell中 if else以及大于、小于、等于逻辑表达式介绍_linux shell

比如比较字符串.判断文件是否存在及是否可读等,通常用"[]"来表示条件测试. 注意:这里的空格很重要.要确保方括号的空格.笔者就曾因为空格缺少或位置不对,而浪费好多宝贵的时间. if ....; then....elif ....; then....else....fi[ -f "somefile" ] :判断是否是一个文件[ -x "/bin/ls" ] :判断/bin/ls是否存在并有可执行权限[ -n "$var" ]

shell中1小于/dev/null 2大于&1的含义_linux shell

shell中可能经常能看到:>/dev/null 2>&1 命令的结果可以通过%>的形式来定义输出 /dev/null 代表空设备文件 > 代表重定向到哪里,例如:echo "123" > /home/123.txt 1 表示stdout标准输出,系统默认值是1,所以">/dev/null"等同于"1>/dev/null" 2 表示stderr标准错误 & 表示等同于的意思,2>&a

Shell中的循环语句for、while、until实例讲解_linux shell

在编程语言中,循环语句是最基本的语法之一,在Shell(这里是Bash)中也不例外,再把以前自己写过的相关内容整理一下吧. 这里包括for/while/until循环,以及变量自增的语法实例. Shell(以Bash为例)中的循环语句一般有for.while.until这几种,偶尔还有写错语法的时候,这里结合实例来自己总结一下.也为今后使用提供一个快捷的资料获取渠道. 一.for循环语句 实例1.1 最基本的for循环: (传统的形式,for var in -) 复制代码 代码如下: #!/bi

Shell中取今天、昨天、前天的时间操作代码_linux shell

1. 取今天时间 复制代码 代码如下: $date -d "now" +%Y-%m-%d  2. 取昨天时间 复制代码 代码如下: $date -d "yesterday" +%Y-%m-%d  $date -d "1 days ago" +%Y-%m-%d  ## -d, --date=STRING         display time described by STRING, not `now' STRING可以为'now' . 'yes

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

  这篇文章主要介绍了PowerShell中删除空格.点号.减号和换行方法代码实例,本文直接给出实例代码,需要的朋友可以参考下 代码如下: $text = ' ... Hello ...--- ' $text.Trim(" .-`t`n`r") 结果只显示:Hello

shell脚本学习指南[二](Arnold Robbins & Nelson H.F. Beebe著)_linux shell

该进入第四章了,刚才看到一个帖子标题:我空有一身泡妞的好本领,但可惜自己是个妞.汗-这个...音乐无国界嘛,这个不应该也没性别界么? 第四章文本处理工具 书中先说明了以下排序的规则,数值的就不用说了,该大就大该小就小,但是字符型很多时候是区分声调或者重音的.在命令行中输入locale查看自己系统的编码配置.默认的是系统配置里的,但是可以自己设置排序的编码.如: 复制代码 代码如下: $ LC_ALL=C sort french-english #以传统ASCII码顺序排序 下边介绍以下排序命令s

Android中删除文件名显示乱码的文件方法

原意是备份一个hosts文件,然后修改hosts的内容的(作用大家懂的),用RE复制,然后粘贴就出现这个乱码的文件了,用RE删,提示删除成功,但再次进入/etc又会出现这个文件,我删了N次这个文件都阴魂不散,彻底晕倒了.   由于hosts文件在手机rom中,把手机接上电脑只能看到TF卡上的内容,所以只能在手机上想办法了.   最后,解决办法是通过终端(shell)把它OK掉(删掉),估计用USB接到电脑用adb shell也可以,我没试验过.   手机需要装上的软件如下: Better Ter

Shell脚本中调用、引用、包含另外一个脚本文件的两种方法_linux shell

脚本 first (测试示例1) 复制代码 代码如下: #!/bin/bash echo 'your are in first file'  问)在当前脚本文件中调用另外一个脚本文件? 方法一: 使用 source 脚本 second (测试示例2) 复制代码 代码如下: #!/bin/bash echo 'your are in second file' source first 方法二: 使用 . 脚本 second (测试示例3) 复制代码 代码如下: #!/bin/bash echo '