JPa*_*shs 0 command-line command delete
是否有一个终端命令来删除包含给定文本的文件?
假设我有三个文件,其中一些包含文本“extract($_REQUEST)”:
file-1.php
:此文件包含文本“extract($_REQUEST)”file-2.txt
: 我不file-3.html
:此文件包含文本“extract($_REQUEST)”我正在寻找的命令将删除文件:file-1.php
和file-3.html
.
更新:该文件仅当“extract($_REQUEST)”是文件中唯一的文本行时才应删除该文件。请参阅以下示例:
file-4.php
:此文件JUST包含文本“提取物($ _ REQUEST)”file-5.php
: 该文件包含文本“extract($_REQUEST)”和其他文本行然后命令将删除file-4.php
并且不会删除file-5.php
。
find . -maxdepth 1 -type f \
-exec fgrep -q 'extract($_REQUEST)' '{}' ';' \
-not -exec fgrep -vq 'extract($_REQUEST)' '{}' ';' \
-delete
Run Code Online (Sandbox Code Playgroud)
find .
搜索当前目录-maxdepth 1
并且没有子目录-type f
查找文件-exec
并为每个执行此测试
fgrep
纯字符串搜索
-q
没有可见的输出'extract($_REQUEST)'
对于这个字符串'{}'
在您找到的文件中';'
[执行结束]-not
不是下一个测试
-exec
再次执行
fgrep
再次 fgrep
-vq
但这次寻找不匹配的行'extract($_REQUEST)'
寻找相同的模式'{}'
在文件中';'
[执行结束]-delete
删除它们这是有效的,因为 exec 也是一个测试,当 fgrep 找到匹配项时,测试成功并运行删除。如果 grep 返回 false,则删除未完成。