繁体   English   中英

除了linux终端中的一种类型之外,删除某种类型的所有文件

[英]Remove all files of a certain type except for one type in linux terminal

在我运行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名之外还删除了所有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以进行测试。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM