我试图在shell脚本中使用find来计算我匹配通配符模式的文件数,然后获取文件名(如果只有一个)。但是我无法将通配符模式传递给反向扩展。
FINDCMD="find . -iname *DATA*.txt"
DATACOUNT=$($FINDCMD | wc -l)
if [ $DATACOUNT -eq 1 ]
then
use-data $($FINDCMD)
else
echo bugger
fi
这不起作用:shell在调用find时展开 DATA .txt。我希望传递星号来找到。
如果我做到了
FINDCMD="find . -iname '*DATA*.txt'"
然后shell不会扩展星号,但是find会得到单引号并且什么都不匹配。
答案 0 :(得分:1)
不要将命令放在变量中。直接执行命令有什么问题?
DATACOUNT=$(find . -iname "*DATA*.txt" | wc -l)
if [ $DATACOUNT -eq 1 ];then
.....
fi
编辑:
如果您想重复使用该命令,请使用子程序
myfind(){
find . -iname "*DATA*.txt" | wc -l
}
答案 1 :(得分:1)
以下几点:
FINDCMD="find . -iname \"*DATA*.txt\""
或FINDCMD='find . -iname "*DATA*.txt"'
-f Disable pathname expansion.
,如下所示set -f
这应该可以解决问题。虽然没有在你的脚本上测试过,但你应该从这一点上得到这个想法。
答案 2 :(得分:-1)
切换单引号和双引号。
尝试:
FINDCMD='find . -iname "*DATA*.txt"'