有条件的shell

时间:2012-08-15 22:26:17

标签: shell

find . -type f -exec sh -c '  if [cat ${1} == "abc" ]   then  echo ${1} fi' _ {} \;

我收到了这个错误:

_: -c: line 1: syntax error: unexpected end of file

我在这做什么是:

查找此目录中的所有文件,如果文件内容为abc,则打印文件名。

谢谢!

2 个答案:

答案 0 :(得分:1)

在'['和之前']'和';'之后加上空格在']'之后

另一种方法是使用

[ `cat ${1}` == "abc" ] && echo ${1}

答案 1 :(得分:1)

这里的问题是[(又名'test')需要与cat分隔一个空格,如下所示:

find . -type f -exec sh -c 'if [ cat ${1} = "abc" ]; then  echo ${1}; fi' _ {} \;

if语句之后和fi语句之前,你也丢失了分号(看起来你最初在单独的行上有这些分号,基于那里的间距,可能是由于你缩进的方式)

正如下面的评论所指出的那样,运行此命令会显示错误消息too many arguments in if []。在"cat ${1}"周围使用双引号可以避免出现错误消息,但这只会将"cat ${1}"的扩展与"abc"进行比较。您可能正在寻找的是[ "$(cat ${1})" == "abc" ]。不幸的是,当您将一个很长的文件与"abc"进行比较时,这可能会导致问题。

您可以使用grep进行测试,或者对文件进行校验和(例如shasum),并根据"abc"的校验和进行测试,具体取决于您的原因正在做测试。