我想删除当前目录下的所有 .ppm 和 .png 文件。因此,在网上查找了一些关于“find”命令用法的网页后,我输入了以下命令:
find . -type f \( -iname ".png" -o -iname ".ppm \) -exec rm {} \;
但终端只显示了
>
什么都没做。这有什么错?
答案1
"
您只是忘了用after关闭引用的字符串".ppm
。
你>
看到的是 Bash 的二级提示,由环境变量定义$PS2
。当您输入一个应该继续的命令片段(例如,因为它有一个未闭合的引号字符串或缺少done
或fi
关键字...)但按 Enter 进行换行时,您会得到它。
另一件事是,-iname ".png"
只会(不区分大小写)匹配具有精确的名称为“.png”。您想要匹配所有以“.png”结尾的文件,因此条件必须是-iname "*.png"
。当然,“.ppm”也一样。
因此正确的find
命令应该是:
find . -type f \( -iname "*.png" -o -iname "*.ppm" \) -exec rm {} \;
不过,我通常建议先进行空运行,-exec rm {} \;
然后再次检查文件列表是否正确,然后再让它在没有进一步确认的情况下删除内容。
此外,正如评论中正确指出的那样,您可以并且可能应该用 来替换,-exec rm {} \;
以便-delete
让其find
在内部处理删除。
答案2
你不需要这样做find
。相反,你可以运行
rm *{.png,.ppm}
在目录中。