最近在整理硬盘(水果机),想删除 /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
1
Valyrian 2019-02-16 19:29:09 +08:00
双引号换成单引号
|
2
Valyrian 2019-02-16 19:31:23 +08:00
当我没说- -
|
4
sdijeenx 2019-02-16 19:39:08 +08:00
find . -name *.mht -exec rm -rvf {} \;
|
5
aocif23 2019-02-16 19:43:03 +08:00
先用 find . -name "*.mht" 看看能匹配到不。
我一般这样用的。 find . -name "*.mht" | xargs -i rm -rf {} |
6
aocif23 2019-02-16 19:43:45 +08:00 1
另外,老歌借一部说话 [滑稽]
|
7
zbinlin 2019-02-16 19:46:47 +08:00 1
find . -name '*.mht' -delete
find . -name '*.mht' -exec rm '{}' \; find . -name '*.mht' -print0 | xargs -0 rm -f |
8
luozic 2019-02-16 19:48:13 +08:00 via iPhone
最好先输出到一个文本里面,检查一下之后直接按 list 删掉
|
9
sdijeenx 2019-02-16 19:58:28 +08:00
@luozic 有道理,可以在 rm 后边加个-i 输入 y 才会删除文件像这样:
find . -name *.mht -exec rm -i {} \; |
10
dazkarieh OP |
11
hguandl 2019-02-16 20:44:25 +08:00
推荐楼上的那个 print0 写法,能解决一些奇怪字符造成的问题。而且 xargs -0 就是专门和 find -print0 对接的参数,非常适合搭配使用。
|
12
misaka19000 2019-02-16 20:51:15 +08:00 via Android
用 python 写会简单很多
|
13
ipwx 2019-02-16 21:44:25 +08:00
我最近喜欢这么用:
find . -name "*.xxx" -exec bash -c ' FN="{}" ... 然后你就可以随便怎么写了 ' \; |
14
quinoa42 2019-02-17 02:49:33 +08:00
没删成是因为空格在 expand 之后被当成 arg 分隔符了吧
|
15
shuangyeying 2019-02-17 07:56:39 +08:00
学了一招,之前都是设置成只搜索当前文件夹,然后搜索后缀名,然后直接删除。
|
16
richzhu 2019-02-17 10:03:07 +08:00 via iPhone
为什么要 find 你这个需求 直接 rm -rf *.mht
|
17
billgreen1 2019-02-17 10:19:25 +08:00 1
@richzhu *.mht 会被扩展成具体的文件名,文件数量过多后 rm 就搞不定了,这个数量具体是多少得查查。
|
19
coolloves 2019-02-17 11:09:23 +08:00 via iPhone
有大括号,估计 rm 报错了?
用 inode 删 |
20
richzhu 2019-02-17 13:36:54 +08:00 via iPhone
@billgreen1 他不是就要删除 mht 扩展名嘛,不根据需求来嘛😂 他能有几个文件……
|
21
iwtbauh 2019-02-17 13:59:47 +08:00 via Android
既然是 Linux 节点,我默认你用的是 GNU find
GNU find 有一个 '-delete' 选项 即 find . -name "*.mht" -delete |