![](/img/trans.png)
[英]In Linux terminal, how to delete all files in a directory except one or two
[英]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存档之外的每个文件。 我假设它是rm
和file
的某种组合,但我不确定确切的语法。
如果它适合你的参数列表并且没有文件名包含冒号,那么带有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.