3

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

我的目标是永久删除除 zip 存档之外的每个文件。rm我认为它是and的某种组合file,但我不确定确切的语法。

4

5 回答 5

2

如果它适合您的参数列表并且没有文件名包含冒号,xargs则应该使用简单的管道:

file * | grep -vi zip | cut -d: -f1 | tr '\n' '\0' | xargs -0 rm
于 2012-09-06T19:38:33.953 回答
1

首先find查找匹配文件,然后file获取文件类型。sed消除其他文件类型,并从file. 最后,rm删除:

find -name 'index.html.[0-9]*' | \                
    xargs file | \                                
      sed -n 's/\([^:]*\): Zip archive.*/\1/p' |  
        xargs rm
于 2012-09-06T19:37:30.647 回答
1

我会跑:

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

如果您有足够的信心,请删除 -i 选项

于 2012-09-06T19:39:11.967 回答
1

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

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

从您的外壳提示符。

于 2012-09-06T19:44:42.667 回答
0
for i in index.html.*
do
    $type = file $i;
    if [[ ! $file =~ "Zip" ]]
    then
        rm $file
    fi
done

将 更改rm为 als以进行测试。

于 2012-09-06T19:44:28.763 回答