这个bash命令有什么问题(找+ xarg + grep)?

时间:2016-02-02 10:01:15

标签: linux bash

我通过这样做来学习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

由于https://stackoverflow.com/a/1711985/4032670

而无法正常工作

2 个答案:

答案 0 :(得分:2)

您可以像这样使用findxargs

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

打印所有匹配的文件。