我有一个命令用来查找*.xml
服务器上的所有文件。我在用着:
find -type f -exec grep -il "xml" {} \;
这很棒,但是服务器上可能有一千个这样的文件,并且我的窗口被填满了。
我希望能够生成一份报告并将其保存在服务器上的某个位置,甚至通过电子邮件发送给我。
我还想指定在生成此报告时仅查看最近 5 天的情况。
答案1
让我们首先将文件保存在某个地方。
听你的命令:
find -type f -exec grep -il "xml" {} \;
并通读:shell 的控制和重定向运算符是什么?到它说的地方:
>
:将命令的输出定向到文件中。
使您的命令类似于:
find -type f -exec grep -il "xml" {} \; > /tmp/report.txt
我将借此机会建议对您当前的find
命令进行一些调整:
可能是个人偏好(或我的遗留记忆),但我喜欢指定 的起始目录
find
,如下所示:find / -type f ....
这样无论您从哪里启动命令或脚本,它总是会产生预期的结果。
- 您的
find
命令不是搜索“*.xml”文件,而是搜索包含(不区分大小写)字符串“xml”的文件。如果您想要内容搜索,请停止阅读本段。如果您确实想查找其中包含“xml”的文件文件名,然后查找类似以下内容:find / -type f -iname '*xml*'
-- whereiname
告诉find
匹配包含(不区分大小写)“xml”的文件名。如果您只关心“xml”位于结尾文件名的,然后使用find / -type f -iname '*xml'
或... -iname '*.xml
,如果您希望在 xml 之前添加句点。
2a.如果你是想要搜索文件的内容,请考虑将一般情况更改grep
为告诉 grep 您正在搜索固定字符串的情况:... grep -Fil xml ...
以加快速度。
要告诉 find 仅报告过去 5 天内修改过的文件,请使用
-mtime -5
.由于您将 Q 标记为 Linux,因此我假设您已找到 GNU(
man find
并在描述中查找“GNU”进行确认)。在这种情况下,可以find
通过使用以下语法告诉每个 exec 传递多个文件来 加快进程速度:find / -type f -mtime -5 -exec grep -Fil xml {} + > /tmp/report.txt