在Linuxterminal中除去一种types的所有文件

在运行Ubuntu的计算机上,我有一个文件夹,里面有数百个文件,全部命名为“index.html.n”,其中n从1开始并继续向上。 其中一些文件是实际的html文件,一些是图像文件(png和jpg),其中一些是zip文件。

我的目标是永久删除除zip压缩文件外的所有文件。 我认为这是rmfile的一些组合,但我不确定确切的语法。

如果它适合你的参数列表,并没有文件名包含冒号一个简单的管道与xargs应该做的:

 file * | grep -vi zip | cut -d: -f1 | tr '\n' '\0' | xargs -0 rm 

首先find匹配的文件,然后file获取文件类型。 sed消除了其他文件类型,也删除了文件输出中的所有file 。 最后, rm删除:

 find -name 'index.html.[0-9]*' | \ xargs file | \ sed -n 's/\([^:]*\): Zip archive.*/\1/p' | xargs rm 

我会跑:

 for f in in index.html.* do file "$f" | grep -qi zip [ $? -ne 0 ] && rm -i "$f" done 

并删除-i选项,如果你有足够的自信

这是我要用的方法; 它不是完全自动化的,但比其他方法更容易出错。

 file * > cleanup.sh 

要么

  file index.html.* > cleanup.sh 

这将生成当前目录中所有文件(不包括点文件)或所有index.html.*文件的列表,并将列表写入cleanup.sh

使用你最喜欢的文本编辑器(我碰巧是vim),编辑cleanup.sh

  • 添加#!/bin/sh作为第一行
  • 删除所有包含字符串“ Zip archive ”的行
  • 在每一行上,删除从:到行尾的所有内容(在vim中:%s/:.*$//
  • 用“ rm ”后面跟一个空格替换每行的开头

退出编辑器,更新文件。

 chmod +x cleanup.sh 

你现在应该有一个shell脚本,它将删除zip文件以外的所有东西。

在运行之前仔细检查脚本。 注意错别字,以及名称包含shell元字符的文件。 您可能需要为文件名添加引号。

(请注意,如果将其作为单行shell命令执行,则在实际删除它们之前,您没有机会检查要删除的文件列表。)

一旦你满意你的脚本是正确的,运行

 ./cleanup.sh 

从你的shell提示符。

 for i in index.html.* do $type = file $i; if [[ ! $file =~ "Zip" ]] then rm $file fi done 

rm更改为ls用于测试目的。