外行求 find 写法

2019-02-16 19:27:55 +08:00
 dazkarieh

最近在整理硬盘(水果机),想删除 /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

4330 次点击
所在节点    Linux
21 条回复
Valyrian
2019-02-16 19:29:09 +08:00
双引号换成单引号
Valyrian
2019-02-16 19:31:23 +08:00
当我没说- -
dazkarieh
2019-02-16 19:31:31 +08:00
@Valyrian 改了,结果还是一样
sdijeenx
2019-02-16 19:39:08 +08:00
find . -name *.mht -exec rm -rvf {} \;
aocif23
2019-02-16 19:43:03 +08:00
先用 find . -name "*.mht" 看看能匹配到不。

我一般这样用的。
find . -name "*.mht" | xargs -i rm -rf {}
aocif23
2019-02-16 19:43:45 +08:00
另外,老歌借一部说话 [滑稽]
zbinlin
2019-02-16 19:46:47 +08:00
find . -name '*.mht' -delete

find . -name '*.mht' -exec rm '{}' \;

find . -name '*.mht' -print0 | xargs -0 rm -f
luozic
2019-02-16 19:48:13 +08:00
最好先输出到一个文本里面,检查一下之后直接按 list 删掉
sdijeenx
2019-02-16 19:58:28 +08:00
@luozic 有道理,可以在 rm 后边加个-i 输入 y 才会删除文件像这样:
find . -name *.mht -exec rm -i {} \;
dazkarieh
2019-02-16 20:39:58 +08:00
@sdijeenx 谢谢老哥,一句话搞定。
@zbinlin 大哥你牛逼,玩出花式来了
@aocif23 试了这位老哥的,显示
```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 ...]]
```
hguandl
2019-02-16 20:44:25 +08:00
推荐楼上的那个 print0 写法,能解决一些奇怪字符造成的问题。而且 xargs -0 就是专门和 find -print0 对接的参数,非常适合搭配使用。
misaka19000
2019-02-16 20:51:15 +08:00
用 python 写会简单很多
ipwx
2019-02-16 21:44:25 +08:00
我最近喜欢这么用:

find . -name "*.xxx" -exec bash -c '
FN="{}"
... 然后你就可以随便怎么写了
' \;
quinoa42
2019-02-17 02:49:33 +08:00
没删成是因为空格在 expand 之后被当成 arg 分隔符了吧
shuangyeying
2019-02-17 07:56:39 +08:00
学了一招,之前都是设置成只搜索当前文件夹,然后搜索后缀名,然后直接删除。
richzhu
2019-02-17 10:03:07 +08:00
为什么要 find 你这个需求 直接 rm -rf *.mht
billgreen1
2019-02-17 10:19:25 +08:00
@richzhu *.mht 会被扩展成具体的文件名,文件数量过多后 rm 就搞不定了,这个数量具体是多少得查查。
coolloves
2019-02-17 11:05:09 +08:00
@richzhu 多级目录
coolloves
2019-02-17 11:09:23 +08:00
有大括号,估计 rm 报错了?
用 inode 删
richzhu
2019-02-17 13:36:54 +08:00
@billgreen1 他不是就要删除 mht 扩展名嘛,不根据需求来嘛😂 他能有几个文件……

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/535686

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX