技术解析

外行求 find 写法
0
2021-06-21 03:04:05
idczone

最近在整理硬盘(水果机),想删除 /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 扩展名嘛,不根据需求来嘛
数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服