在bash脚本中使用xargs执行find命令

时间:2012-06-06 11:06:45

标签: bash find exec

我正在尝试在bash脚本中执行此命令

find /var/log/apache2/access*.gz -type f -newer ./tmpoldfile ! -newer ./tmpnewfile | xargs zcat | grep -E '$MONTH\/$YEAR.*GET.*ad=$ADVERTISER HTTP\/1' -c

如果我直接执行它或将其分配给变量,则返回0

但是如果我对命令进行回显(用脚本替换变量)并在命令行中执行它就可以了。

echo "find /var/log/apache2/access*.gz -type f -newer ./tmpoldfile ! -newer ./tmpnewfile | xargs zcat | grep -E '$MONTH\/$YEAR.*GET.*ad=$ADVERTISER HTTP\/1' -c"

如何对我的代码进行编码

1 个答案:

答案 0 :(得分:1)

变量不会在单引号内扩展,即'... $ NOT_EXPANDED ...'。尝试

find /var/log/apache2/access*.gz -type f -newer ./tmpoldfile ! -newer ./tmpnewfile \
| xargs zcat | grep -E "$MONTH\/$YEAR.*GET.*ad=$ADVERTISER HTTP\/1" -c
# newstuff ------------^------------------------------------------^-----------

相同的“或将其分配给变量”

varCount=$(find /var/log/apache2/access*.gz -type f -newer ./tmpoldfile ! -newer ./tmpnewfile \
| xargs zcat | grep -E "$MONTH\/$YEAR.*GET.*ad=$ADVERTISER HTTP\/1" -c )

另外,我必须对-exec发表评论。许多人发现现在支持find ... -exec ... \+,这是(我假设)相当于xargs,但并非所有操作系统都将GNU作为他们的第一个工具。如果您确定永远不会在Solaris,AIX或HPUX商店中工作,那么请使用改进的功能。此外,如果您使用新操作系统,那么xargs可能支持并行处理,我认为find ... -exec ... \+不会这样做。

我希望这会有所帮助。