grep返回脚本中没有这样的文件或目录但是手动工作

时间:2013-10-01 08:49:36

标签: grep

我想要的是制作一个小脚本,对成功通过另一个grep的文件进行grep。

这是我写的:

#!/bin/bash -f

if (( $# != 3 ))
then
    echo "Usage: $0 <directory> <grep1> <grep2>"
    exit 1
fi

dir=$1
grep1=$2
grep2=$3

files=`grep -Ril "$grep1" $dir`

for file in $files; do
        grep -iH "$grep2" $file
done

所以这是有效的,以防目录是特定目录。 但它在我想要使用它的方式上不起作用:

./grepIfSucceededGrep.sh /mnt/logs/\*/20130929/\* test1 test2
grep: /mnt/logs/*/20130929/*: No such file or directory

但是当我手动输入命令时,它可以完美地运行。必须用星号做点什么。

grep -Ril "segment1" /mnt/logs/*/20130929/*
/mnt/logs/1111/20130929/000033.00.log
/mnt/logs/1112/20130929/000033.00.log
/mnt/logs/1113/20130929/154852.00.log
/mnt/logs/1114/20130929/171227.00.log

为什么? :(只搜索了2个小时才得到一个workarround但没有解决这个问题。

1 个答案:

答案 0 :(得分:0)

您真的需要一个脚本来实现您的需求吗?你可以说:

find /path -type f -exec sh -c "grep -iq string1 {} && grep -iq string2 {} && echo {}" \;

这将列出/path和包含string1string2的子目录中的文件。

如果您需要将其放入脚本以便传递参数,请说:

find $1 -type f -exec sh -c "grep -iq $2 {} && grep -iq $3 {} && echo {}" \;

在文件中,说myfind.sh可以通过说sh myfind.sh /my/path/to/search firststring secondstring来调用。