在文件中搜索模式并删除
search for pattern in files and delete
我有一个包含文本文件的目录,其中包含如下原始 http 请求
POST /test HTTP/1.1
Host: host.com
Content-Type: application/x-www-form-urlencoded
Accept-Language: en-US, gHNEY;q=0.9, *;q=0.5
Accept-Charset: utf-8, iso-8859-1;q=0.5, 3AG19;q=0.2, *;q=0.1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_5)
Accept: */*, text/XppPa
param1=ffff&
如您所见,名为 2b0c9d9254abb4a775023177380c2598.txt
的文件是 url 的 md5sum,现在情况并非如此,但我想提一下
我想要的是搜索 not containing parameters
的文件并将其删除,这样该目录中的其余文件将只是包含参数
的文件
我尝试的是在那些包含参数的文件中找到的 grep 唯一值,我发现常见的是 char &
,它写在参数值
旁边
所以我尝试了以下命令,但没有用
grep -lrIvE '&' . | xargs -0 rm -f --
结果是
./2b0c9d9254abb4a775023177380c2598.txt'$'\n': File name too long
当我在 grep 中添加大写字母 Z 时,删除了所有文件
所以有没有办法做到这一点,如果我可以过滤包含唯一参数的请求(文件),那就太棒了
谢谢
注意:如果没有 grep
的 -Z
选项,则不能使用 xargs
的 -0
选项。记录分隔符不匹配。
您的问题是 grep -v
匹配所有不包含 &
的行。你所有的文件都至少有一个。您可以搜索匹配的行,而不是搜索不匹配的行,仅当找到 none 时才删除文件:
find . -type f -print0 | while IFS= read -r -d '' f; do
grep -Iq '&' "$f" || printf 'rm -f %s\n' "$f"
done
将 printf 'rm -f %s\n' "$f"
替换为 rm -f "$f"
一旦您确信它可以满足您的要求。
我有一个包含文本文件的目录,其中包含如下原始 http 请求
POST /test HTTP/1.1
Host: host.com
Content-Type: application/x-www-form-urlencoded
Accept-Language: en-US, gHNEY;q=0.9, *;q=0.5
Accept-Charset: utf-8, iso-8859-1;q=0.5, 3AG19;q=0.2, *;q=0.1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_5)
Accept: */*, text/XppPa
param1=ffff&
如您所见,名为 2b0c9d9254abb4a775023177380c2598.txt
的文件是 url 的 md5sum,现在情况并非如此,但我想提一下
我想要的是搜索 not containing parameters
的文件并将其删除,这样该目录中的其余文件将只是包含参数
我尝试的是在那些包含参数的文件中找到的 grep 唯一值,我发现常见的是 char &
,它写在参数值
所以我尝试了以下命令,但没有用
grep -lrIvE '&' . | xargs -0 rm -f --
结果是
./2b0c9d9254abb4a775023177380c2598.txt'$'\n': File name too long
当我在 grep 中添加大写字母 Z 时,删除了所有文件
所以有没有办法做到这一点,如果我可以过滤包含唯一参数的请求(文件),那就太棒了
谢谢
注意:如果没有 grep
的 -Z
选项,则不能使用 xargs
的 -0
选项。记录分隔符不匹配。
您的问题是 grep -v
匹配所有不包含 &
的行。你所有的文件都至少有一个。您可以搜索匹配的行,而不是搜索不匹配的行,仅当找到 none 时才删除文件:
find . -type f -print0 | while IFS= read -r -d '' f; do
grep -Iq '&' "$f" || printf 'rm -f %s\n' "$f"
done
将 printf 'rm -f %s\n' "$f"
替换为 rm -f "$f"
一旦您确信它可以满足您的要求。