根据有关该错误消息的信息,我不确定转义引号是否是这里的真正问题。
你最终想要做什么?可能有一种稍微不同的方法可以避免这个问题。您似乎正在尝试计算具有某个“最后修改”日期的文件数。这是准确的吗?如果是这样,我强烈建议不要使用 的输出ls
来做到这一点。平台之间的输出不一致,甚至可以在版本之间更改。该find
实用程序更适合此类事情。
尝试这样的事情:
dir=/mnta2/gvt/Interfaces/output/BI/sent/
pattern="*.?${vDiaAnterior}*"
time= # Fill this in based on the "last modified" time that you're looking for
find $dir -iname "$pattern" -mtime $time -exec printf '.' \; | wc -c
您可以省略使用额外的变量,它们只是为了使网页上的代码更具可读性。
这将在给定目录中搜索名称与指定通配符模式匹配且“最后修改”时间与您指定的任何文件匹配的所有文件。对于找到的每个匹配项,将printf '.'
运行代码(将一个点打印到标准输出)。 wc
然后计算点字符的数量,这将等于找到的匹配文件的数量。ls
这种方法的好处是它最大限度地减少了程序之间(包括 shell 和) 之间需要传输的数据量。find
在内部处理通配符匹配,而不是要求 shell 扩展通配符并将结果传递给ls
. 您也只向每个匹配文件发送一个字符,wc
而不是一长行ls
每场比赛的输出。这应该会减少您遇到“arg list too long”错误的机会。