在我运行 Ubuntu 的计算机上,我有一个文件夹,里面有数百个文件,所有文件都命名为“index.html.n”,其中 n 从 1 开始并继续向上。其中一些文件是实际的 html 文件,一些是图像文件(png 和 jpg),还有一些是 zip 文件。
我的目标是永久删除除 zip 存档之外的每个文件。rm
我认为它是and的某种组合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
从您的外壳提示符。
for i in index.html.*
do
$type = file $i;
if [[ ! $file =~ "Zip" ]]
then
rm $file
fi
done
将 更改rm
为 als
以进行测试。