我通过这样做来学习bash脚本,我必须找到不包含某个字符串的文件,而我提出的命令并不起作用。我在此期间通过使用grep -L(stackoverflow.com/questions/1748129/)解决了这个问题,但我仍然想知道我的原始命令有什么问题(所以我可以为将来学习)
命令是:
<cctype>
和错误
find path/ -name *.log -print0 | xargs -0 -i sh -c "if [ '1' == $(cat {} | grep -c 'string that should not occur') ]; then echo {}; fi"
我也试过没有&#39; sh -c&#39;以前,但它也没有工作。
编辑: 我也试过
cat: {}: No such file or directory
而无法正常工作
答案 0 :(得分:2)
您可以像这样使用find
和xargs
:
find path/ -name '*.log' -print0 |
xargs -r0 -I {} bash -c 'grep -q "string that should not occur" "{}" || echo "{}"'
如果没有bash -c
,您可以使用grep -L
执行此操作:
find path/ -name '*.log' -print0 |
xargs -r0 grep -L "string that should not occur"
答案 1 :(得分:0)
xargs不会插入{}。
尝试:
find path/ -name "*.log" | \
while read file; do
if grep -q 'string that should not occur' "$file"; then
echo $file ;
fi ;
done
打印所有匹配的文件。