最近在整理硬盘(水果机),想删除 /downloads 目录下所有 mht 类型的文件。
无奈神秘代码太多,不能一一删除,所以在终端试了下 find 命令
find . -name "*.mht" | xargs rm -f
发现还有漏网之鱼。
./1118 -1141/{最新国产日韩欧美新片合集发布}.mht
./1118 -1141/_1024 核工厂最新地址.mht
./1119 -2318-01-10/{最新国产日韩欧美新片合集发布}.mht
./1119 -2318-01-10/_1024 核工厂最新地址.mht
./1109 -0680/{最新国产日韩欧美新片合集发布}.mht
./1109 -0680/_1024 核工厂最新地址.mht
./1117 -0413/{最新国产日韩欧美新片合集发布}.mht
./1117 -0413/_1024 核工厂最新地址.mht
*.mht
难道不能包含所有 mht 类型的文件吗,求正解 o(╯□╰)o
双引号换成单引号
当我没说- -
改了,结果还是一样
find . -name *.mht -exec rm -rvf {} \;
先用 find . -name "*.mht" 看看能匹配到不。
我一般这样用的。
find . -name "*.mht" | xargs -i rm -rf {}
另外,老歌借一部说话 [滑稽]
find . -name '*.mht' -delete
find . -name '*.mht' -exec rm '{}' \;
find . -name '*.mht' -print0 | xargs -0 rm -f
最好先输出到一个文本里面,检查一下之后直接按 list 删掉
有道理,可以在 rm 后边加个-i 输入 y 才会删除文件像这样:
find . -name *.mht -exec rm -i {} \;
谢谢老哥,一句话搞定。
大哥你牛逼,玩出花式来了
试了这位老哥的,显示
```bash
xargs: illegal option -- i
usage: xargs [-0opt] [-E eofstr] [-I replstr [-R replacements]] [-J replstr]
[-L number] [-n number [-x]] [-P maxprocs] [-s size]
[utility [argument ...]]
```
推荐楼上的那个 print0 写法,能解决一些奇怪字符造成的问题。而且 xargs -0 就是专门和 find -print0 对接的参数,非常适合搭配使用。
用 python 写会简单很多
我最近喜欢这么用:
find . -name "*.xxx" -exec bash -c '
FN="{}"
... 然后你就可以随便怎么写了
' \;
没删成是因为空格在 expand 之后被当成 arg 分隔符了吧
学了一招,之前都是设置成只搜索当前文件夹,然后搜索后缀名,然后直接删除。
为什么要 find 你这个需求 直接 rm -rf *.mht
*.mht 会被扩展成具体的文件名,文件数量过多后 rm 就搞不定了,这个数量具体是多少得查查。
多级目录
有大括号,估计 rm 报错了?
用 inode 删
他不是就要删除 mht 扩展名嘛,不根据需求来嘛