find . -type f -exec sh -c ' if [cat ${1} == "abc" ] then echo ${1} fi' _ {} \;
我收到了这个错误:
_: -c: line 1: syntax error: unexpected end of file
我在这做什么是:
查找此目录中的所有文件,如果文件内容为abc,则打印文件名。
谢谢!
答案 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"
的校验和进行测试,具体取决于您的原因正在做测试。