有条件的壳(Conditional in shell)

2019-07-31 00:50发布

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

我得到这个错误:

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

我在这里做什么是:

找到这个目录,打印文件名称的所有文件,如果文件内容为abc。

谢谢 !

Answer 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}""abc" 。 什么,你可能要找的是[ "$(cat ${1})" == "abc" ] 。 不幸的是,这很可能是当您比较具有非常长的文件引起的问题"abc"

你可以使用grep做测试,或采取校验(如shasum )的文件,并测试针对的校验和"abc" ,这取决于你为什么这样做测试。



Answer 2:

把空间后“[”和之前“]”和“;” 之后 ']'

另一种方法是使用

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


文章来源: Conditional in shell
标签: shell