【问题标题】:execute find command with xargs in bash script在 bash 脚本中使用 xargs 执行 find 命令
【发布时间】:2012-06-06 11:06:45
【问题描述】:

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

找到 /var/log/apache2/access*.gz -type f -newer ./tmpoldfile ! -较新的 ./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"

我应该如何为工作编写代码

【问题讨论】:

  • 你根本不需要 xargs。查看find-exec 参数

标签: bash find exec


【解决方案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 find 作为他们的第一个工具。如果您确定自己永远不会在 Solaris、AIX 或 HPUX 商店中工作,那么请使用改进的功能。另外,如果您使用的是新操作系统,那么xargs 可能支持并行处理,我认为find ... -exec ... \+ 不会这样做。

我希望这会有所帮助。

【讨论】:

  • 太棒了!这就是问题所在。
猜你喜欢
  • 1970-01-01
  • 2015-06-17
  • 1970-01-01
  • 1970-01-01
  • 2016-07-25
  • 2012-10-16
  • 1970-01-01
  • 1970-01-01
  • 2017-04-03
相关资源
最近更新 更多