使用find和grep搜索文件后如何删除文件?

使用find和grep搜索文件后如何删除文件?

我正在使用此命令来搜索特定文件:

find . -type f -name Client.php | xargs grep WARNING

我不知道如何添加删除命令,以便在删除命令发生之前提示用户。

答案1

您无法通过管道传输到xargs此处并重新加入查找,可以像单独find运行命令一样。grep

-exec基本的对一个或多个文件运行命令。仅当命令本身以成功结果退出时,它才会成功并继续处理右侧的操作数,因此

find . -type f -name Client.php -exec grep -q WARNING {} \; -exec echo {} \;

将要打印出每个名为“Client.php”且其中包含“WARNING”的文件的路径。您可以更改该秒-exec ... \;-delete将其删除,或更改命令以使用rmmv处理它们。


分号确保一次只检查一个文件,并且我们得到这种成功时的真实行为:

如果主要表达式由 <分号> 标点,则该实用程序实用程序名称应为每个路径名调用一次,如果实用程序返回零值作为退出状态,则主路径应评估为 true。

整个-exec ... \;是一个块,所以如果您正在使用,-delete您需要删除分号以及-exec命令。


我建议运行上面的命令第一的并确保在实际删除它们之前它确实只包含您想要的文件。但是,完整的无需询问的删除命令将是

find . -type f -name Client.php -exec grep -q WARNING {} \; -delete

谨慎行事!

答案2

你可以写一个脚本:

#!/bin/bash

FINDFILE=Client.php
if [[ $(find . -type f -name $FINDFILE | xargs grep "WARNING") ]] ; then
rm -i $FINDFILE
else
echo "File with warning not found."
fi

将脚本放在 /usr/local/bin 中,chmod +x /usr/local/bin/scriptname。
现在您可以随时随地执行它。(最好不要使用 .sh 扩展名)

相关内容