You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在fish shell中递归删除非MP3文件?

如何在fish shell中递归删除非MP3文件?

嘿,我注意到你尝试用rm | ls -R | grep -v "*.mp3"来删除非MP3文件,但这个命令其实逻辑不对——管道顺序搞反了,而且rm默认不会读取标准输入的内容来执行删除,所以这个命令不仅起不到作用,还可能引发错误。咱们先明确你的目录结构:

/Music
|--- folder1
|--- folder2
|--- folder3
|    |---- folder3.1
|    |---- folder3.2
|    \---- folder3.3
|--- folder4

下面给你两种在fish shell里安全递归删除非MP3文件的方法:

方法一:使用find命令(通用且安全)

find命令是处理递归文件操作的经典工具,在fish里也能直接使用。你可以先运行不带删除参数的命令,确认要删除的文件列表:

find /Music -type f ! -name "*.mp3"

如果列表符合你的预期,再加上-delete参数执行删除:

find /Music -type f ! -name "*.mp3" -delete

参数解释:

  • -type f:只匹配文件(排除目录)
  • ! -name "*.mp3":排除所有后缀为.mp3的文件
  • -delete:删除匹配到的文件

方法二:利用fish的递归glob特性

fish shell支持**作为递归匹配所有子目录的通配符,结合!(mp3)的否定匹配语法,可以直接构造要删除的文件路径:
先执行echo命令确认文件列表:

echo /Music/**/*.!(mp3)

确认无误后,执行删除:

rm /Music/**/*.!(mp3)

这个方法更简洁,是fish特有的便捷写法。

重要提醒

不管用哪种方法,一定要先运行不带删除操作的命令,确认要删除的文件列表正确,避免误删重要文件。

备注:内容来源于stack exchange,提问作者Leo_2233

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 15:57:48