当我输入此查找命令时,终端仅显示>符号

当我输入此查找命令时,终端仅显示>符号

我想删除当前目录下的所有 .ppm 和 .png 文件。因此,在网上查找了一些关于“find”命令用法的网页后,我输入了以下命令:

find . -type f \( -iname ".png" -o -iname ".ppm \) -exec rm {} \;

但终端只显示了

>

什么都没做。这有什么错?

答案1

"您只是忘了用after关闭引用的字符串".ppm

>看到的是 Bash 的二级提示,由环境变量定义$PS2。当您输入一个应该继续的命令片段(例如,因为它有一个未闭合的引号字符串或缺少donefi关键字...)但按 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}

在目录中。

相关内容