在运行Ubuntu的计算机上,我有一个文件夹,里面有数百个文件,全部命名为“index.html.n”,其中n从1开始并继续向上。 其中一些文件是实际的html文件,一些是图像文件(png和jpg),其中一些是zip文件。
我的目标是永久删除除zip压缩文件外的所有文件。 我认为这是rm
和file
的一些组合,但我不确定确切的语法。
如果它适合你的参数列表,并没有文件名包含冒号一个简单的管道与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
用于测试目的。