find . -type f -exec sh -c ' if [cat ${1} == "abc" ] then echo ${1} fi' _ {} \;
我收到了这个错误:
_: -c: line 1: syntax error: unexpected end of file
我在这里要做的是:
查找此目录下的所有文件,如果文件内容为 abc,则打印文件名。
谢谢 !
find . -type f -exec sh -c ' if [cat ${1} == "abc" ] then echo ${1} fi' _ {} \;
我收到了这个错误:
_: -c: line 1: syntax error: unexpected end of file
我在这里要做的是:
查找此目录下的所有文件,如果文件内容为 abc,则打印文件名。
谢谢 !
在 '[' 和 ']' 和 ';' 之前放置空格 之后 ']'
另一种方法是使用
[ `cat ${1}` == "abc" ] && echo ${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"
,具体取决于您进行测试的原因。