“查找:使用“ -exec rm -f {} \”时缺少“ -exec”的参数”


12

我运行以下命令:

~/shell_temp$ find . -type f -name "IMAG1806.jpg" -exec rm -f {}\

我得到下面的输出:

> IMAG1806.jpg

Error:
find: missing argument to `-exec'

从当前目录中查找任何文件并用删除的确切命令是什么-exec


1
你不能只是去rm "IMAG1806.jpg"吗?它在同一目录中,因此您知道它的名字。
TheWanderer 2015年

@ Zacharee1-将假定OP正在执行“空运行”。我会考虑将-i与rm一起使用,以防万一您发现“查找”了更多的文件,或者至少在没有-exec的情况下运行并查看了文件列表
Panther

1
@ Zacharee1:find命令将删除当前目录及其所有子目录(任何深度)中使用此名称调用的所有文件。
丹尼斯

3
或者代替直接使用而-exec rm不仅仅是使用-delete
Braiam

Answers:


30

您错过了;末尾的a (和之间{}也有空格;)。正确的命令是:

find . -type f -name "IMAG1806.jpg" -exec rm -f {} \;

;表示的-exec谓词结尾find

还要注意,我们在前面使用了\;ie 来逃避shell 的解释,否则shell将被视为整个命令的结尾,并且会抛出相同的错误。您也可以使用代替。\;;;findfind';'\;

\在最后使用了它,这表明您的外壳将继续通过PS2(以表示>)进行输入,IMAG1806.jpg再次输入,因此整个命令变为:

find . -type f -name "IMAG1806.jpg" -exec rm -f {}IMAG1806.jpg

正如你可以看到这是不是在所有有效的命令IMAG1806.jpg在终点,没有关闭的-exec与谓语不带空格{}\;


1
“您;最终错过了a ”。为此,花了10分钟时间进行故障排除,然后才意识到我不小心键入:;,而不是在这些现代高清屏幕上很容易错过...
user5359531 2016年

7

你可以简单地

find . -type f -name 'IMAGE1806.jpg' -delete

从手册页:

Delete files; true if removal succeeded.  If the removal failed,
an  error message is issued.  If -delete fails, find's exit sta‐
tus will be nonzero (when it eventually exits).  Use of  -delete
automatically turns on the -depth option.
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.