自家的一个人同事早就问过笔者如此3个难题:在 Linux 下,如何删除目录中除一些文件之外的装有文件?当时,笔者告诉她可以通过格局相称的章程化解。但其实,除却,还有别的的措施,正所谓“条条大路通休斯敦”。让大家来所有人家看看。

Linux下利用bash删除目录中的特定文件

自家是一名Linux新用户。未来自己索要清理三个下载目录中的文件,其实小编不怕想从~/Download/文件夹删去除了以下格式的文件外所以别的文件:

  • *.iso – 全数的iso格式的公文。
  • *.zip – 全部zip格式的文书。

自己何以在二个基于Linux,OS X 或许 Unix-like 系统上的bash
shell中删除特定的文书呢?

图片 1

Bash脚本1五分钟进级教程

十一个 Linux/Unix下 Bash 和 KSH shell 的作业调整实例

Ubuntu下shell脚本运转至极:Bash和dash的差异

Bash脚本之for语句if语句以及各样测试语句

什么是Bash Shell的内建(build in)命令

Bash shell 扶助加多的文本情势相称符举例:

  • * - 匹配全数的文件。
  • ? - 相称文件名中的单个字母。
  • […] - 相配封闭括号中的任何二个假名。

自家是一名Linux新用户。以后自己要求清理多个下载目录中的文件,其实本人哪怕想从~/Download/文件夹删去除了以下格式的公文外所以此外文件:

假使要删减 ~/Downloads 目录中除 *.iso 和 *.zip 外的 全体文件,那么在
bash 中得以按以下方式处理:

策略 #一: 见识一下扩大的形式相称符

这里您需求用系统内置的shopt命令来开启shell中的extglob选项,然后您就足以选拔扩展的方式符了,那一个格局匹配符如下:

  1. ?(情势列表) - 相称零次或贰次给定的形式。
  2. *(情势列表) - 匹配零次或频仍加以的格局。
  3. +(形式列表) - 至少相配一次给定的模式。
  4. @(格局列表) - 相称一回给定的格局。
  5. !(形式列表) - 不合营给定形式。

1个情势列表正是一个或多少个用 | 分开的形式(文件名)。

先是要张开extgolb选项:

  1. shopt -s extglob
  • *.iso – 全数的iso格式的文本。
  • *.zip – 有着zip格式的文件。

格局一:格局相配法

在Bash中删掉除.zip和.iso文件以外的有着文件

rm 命令的语法格式为:

  1. ## 仅保留 file1 文件 ##
  2. rm !(file1)
  3. ## 仅保留 file1 和 file2 文件##
  4. rm !(file1|file2)
  5. ## 仅保留 zip 文件 ##
  6. rm !(*.zip)
  7. ## 仅保留 zip 和 iso 文件 ##
  8. rm !(*.zip|*.iso)
  9. ## 你也得以应用完整的目录 ##
  10. rm /Users/vivek/!(*.zip|*.iso|*.mp3)
  11. ## 也能够传递参数 ##
  12. rm [选项]!(*.zip|*.iso)
  13. rm -v !(*.zip|*.iso)
  14. rm -f !(*.zip|*.iso)
  15. rm -v -i
    !(*.php)

最后,关闭 extglob 选项措施如下:

  1. shopt -u extglob

自个儿如何在2个基于Linux,OS X 或许 Unix-like 系统上的bash
shell中剔除特定的文件呢?

复制代码 代码如下:

策略 #二: 使用bash的 GLOBIGNORE 变量删除钦命文件以外的富有文件

摘自 bash(1) 手册页:

这是一个用冒号分开的模式列表,通过路径展开方式定义了要忽略的文件集合。如果一个匹配到路径展开模式的文件也匹配GLOBIGNORE中的模式,那么它会从匹配列表中移除。

要删减全部文件只保留 zip 和 iso 文件,应如下设置 GLOBIGNORE:

  1. ## 只在 BASH 中可行 ##
  2. cd ~/Downloads/
  3. GLOBIGNORE=*.zip:*.iso
  4. rm -v *
  5. unset GLOBIGNORE

图片 2

shopt -s extglob # 确认开启 extglob 选项
cd ~/Downloads
rm -v !(*.iso|*.zip)
!(pattern list) 的功能是相称除 pattern list 之外 的文本。

策略 #三: 用 find 命令删除全部别的文件仅保留 zip 和 iso 文件

假如您正在使用 tcsh/csh/sh/ksh
只怕其余shell,你能够在Unix-like系统上试着用下边find命令的语法格式来删除文件:

  1. find /dir/-type f -not-name ‘匹配情势’-delete

或者

  1. ## 对于诡异的公文名能够使用 xargs ##
  2. find /dir/-type f -not-name ‘相配情势’-print0 | xargs -0-I
    {} rm {}
  3. find /dir/-type f -not-name ‘相称格局’-print0 | xargs -0-I
    {} rm [选项]{}

想要删除 ~/source 目录下除 php 以外的文件,键入:

  1. find ~/sources/-type f -not-name ‘*.php’-delete

或者

  1. find ~/sources/-type f -not-name ‘*.php’-print0 | xargs -0-I {} rm -v {}

只保留 *.zip 和 *.iso 文件的语法如下:

  1. find .-type f -not
    \( -name
    ‘*zip’-or-name ‘*iso’ \) -delete

越来越多音讯参见bash command man page和find command man page。

本文永远更新链接地址:

作者是一名Linux新用户。以往自个儿索要清理3个下载目录中的文件,其实我纵然想从~/Download/文件夹删去除…

Bash脚本1四分钟进级教程
http://www.linuxidc.com/Linux/2014-04/100750.htm

格局二:设置变量法

10个 Linux/Unix下 Bash 和 KSH shell 的作业控制实例
http://www.linuxidc.com/Linux/2014-03/98159.htm

在 bash 中,GLOBIGNORE 可用来安装要不经意的情势相称 文件,四个格局通过 :
分隔。

Ubuntu下shell脚本运维非凡:Bash和dash的分别
http://www.linuxidc.com/Linux/2013-10/91100.htm

复制代码 代码如下:

Bash脚本之for语句if语句以及种种测试语句
http://www.linuxidc.com/Linux/2013-07/87922.htm

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

什么是Bash Shell的内建(build in)命令
http://www.linuxidc.com/Linux/2013-06/86039.htm

方法3:find 搜索法

Bash shell 帮助增多的文书形式匹配符举个例子:

熟习 find 的朋友或许知道,find 的威力非常强硬,因而利用它也可消除此主题素材。

  • * - 相配全体的文件。
  • ? - 相称文件名中的单个字母。
  • […] - 相配封闭括号中的任何一个假名。

复制代码 代码如下:

策略 #一: 见识一下增添的方式相称符

这里你需求用系统内置的shopt命令来张开shell中的extglob选项,然后你就能够采用扩展的形式符了,那些格局相称符如下:

  1. ?(方式列表) - 相称零次或贰次给定的情势。
  2. *(方式列表) - 相配零次或频仍加以的形式。
  3. +(情势列表) - 至少相称一次给定的方式。
  4. @(格局列表) - 相配2遍给定的情势。
  5. !(情势列表) - 不相称给定格局。

3个格局列表便是七个或八个用 | 分开的情势(文件名)。

先是要张开extgolb选项:

  1. shopt -s extglob

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

在Bash中删掉除.zip和.iso文件以外的持有文件

rm 命令的语法格式为:

  1. ## 仅保留 file1 文件 ##
  2. rm !(file1)
  3. ## 仅保留 file1 和 file2 文件##
  4. rm !(file1|file2)
  5. ## 仅保留 zip 文件 ##
  6. rm !(*.zip)
  7. ## 仅保留 zip 和 iso 文件 ##
  8. rm !(*.zip|*.iso)
  9. ## 你也足以选用完全的目录 ##
  10. rm /Users/vivek/!(*.zip|*.iso|*.mp3)
  11. ## 也得以传递参数 ##
  12. rm [选项]!(*.zip|*.iso)
  13. rm -v !(*.zip|*.iso)
  14. rm -f !(*.zip|*.iso)
  15. rm -v -i
    !(*.php)

末段,关闭 extglob 选项措施如下:

  1. shopt -u extglob

不过依旧要提醒我们,rm
操作是极其危险的,切勿炫技,假如您不放心,那么能够先安安分分的各类或分批删除,也要比事后找回方便的多。

策略 #二: 使用bash的 GLOBIGNORE 变量删除钦命文件以外的具备文件

摘自 bash(1) 手册页:

那是一个用冒号分开的形式列表,通过路线展开药格局定义了要不经意的文件集结。假如3个匹配到路线张开方式的文书也相配GLOBIGNORE中的方式,那么它会从相配列表中移除。

要刨除全体文件只保留 zip 和 iso 文件,应如下设置 GLOBIGNORE:

  1. ## 只在 BASH 中可行 ##
  2. cd ~/Downloads/
  3. GLOBIGNORE=*.zip:*.iso
  4. rm -v *
  5. unset GLOBIGNORE

你大概感兴趣的稿子:

  • shell备份文件、重命名文件、删除钦点文件的二个剧本分享
  • 选取shell删除数据表中钦赐音信和字段对应的文件
  • shell中删除文件中重复行的不二秘诀

策略 #三: 用 find 命令删除全体其余文件仅保留 zip 和 iso 文件

譬如您正在使用 tcsh/csh/sh/ksh
或然其它shell,你能够在Unix-like系统上试着用上边find命令的语法格式来删除文件:

  1. find /dir/-type f -not-name ‘相配格局’-delete

或者

  1. ## 对于奇异的公文名能够使用 xargs ##
  2. find /dir/-type f -not-name ‘相配方式’-print0 | xargs -0-I
    {} rm {}
  3. find /dir/-type f -not-name ‘相配情势’-print0 | xargs -0-I
    {} rm [选项]{}

想要删除 ~/source 目录下除 php 以外的文件,键入:

  1. find ~/sources/-type f -not-name ‘*.php’-delete

或者

  1. find ~/sources/-type f -not-name ‘*.php’-print0 | xargs -0-I {} rm -v {}

只保留 *.zip 和 *.iso 文件的语法如下:

  1. find .-type f -not
    \( -name
    ‘*zip’-or-name ‘*iso’ \) -delete

越来越多新闻参见bash command man
page和find command man
page。

正文永恒更新链接地址:http://www.linuxidc.com/Linux/2014-06/103623.htm

图片 3

Author

发表评论

电子邮件地址不会被公开。 必填项已用*标注