我的目录如下:
音乐:1.mp3、2.flac、3.wav、4.ogg 和 5.mp4
我尝试使用以下命令删除所有扩展名为 .mp3、.wav、.flac 和 .ogg 的文件:
find ./Music -type f -name \('*.mp3' -or -name '*.wav' -or -name '*.flac' -or -name '*.ogg'\) -delete
但它对目录没有任何作用
知道为什么吗?
(顺便说一句,我比音乐目录高一级)
答案1
你的语法错误。您希望所有-name
选项都在同一个括号中,并在括号周围有一个空格,如下所示:
find ./Music -type f \( -name '*.mp3' -or -name '*.wav' -or -name '*.flac' -or -name '*.ogg' \) -delete
您原来的命令正在使用,-name \('*.mp3' -or -name '*.wav' -or -name '*.flac' -or -name '*.ogg'\)
这意味着它正在查找名为\(*.mp3
, or '*.wav'
or '*.flac'
or 的文件'*.ogg'\)
。如果您运行不带选项的命令,您可以看到这一点-delete
:
$ find ./Music -type f -name \('*.mp3' -or -name '*.wav' -or -name '*.flac' -or -name '*.ogg'\)
./Music/3.wav
./Music/2.flac
\('*.mp3'
由于或没有匹配项*.ogg\)
,因此未找到这些文件。由于您没有将命令分组在括号中(您需要在括号周围留有空格才能使其工作),因此-delete
未按您的预期应用(抱歉,我不知道如何find
解析它)。