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

我收到了这个错误:

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

我在这里要做的是:

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

谢谢 !

4

2 回答 2

1

在 '[' 和 ']' 和 ';' 之前放置空格 之后 ']'

另一种方法是使用

[ `cat ${1}` == "abc" ] && echo ${1}
于 2012-08-15T22:39:52.327 回答
1

这里的问题是[(又名“测试”)需要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}"with的扩展"abc"。您可能正在寻找的是[ "$(cat ${1})" == "abc" ]. 不幸的是,当您将非常长的文件与"abc".

您可以使用grep来进行测试,或获取文件的校验和(例如shasum),然后根据 的校验和进行测试"abc",具体取决于您进行测试的原因。

于 2012-08-15T22:41:42.933 回答