find:在bash脚本中缺少-exec参数

时间:2012-12-20 10:35:51

标签: bash shell find

当我在命令行中输入以下内容时,以下工作正常:

find /<some_path>/{epson,epson_laser,epson_inkjet} -iname "*.ppd" 
  -exec grep "\*ModelName\:" {} \; | sed 's/.*\"\(.*\)\"/\1/'

但是,当我尝试从a中调用以下内容时 bash脚本我得到find: missing argument to -exec'

我也尝试了以下(在许多变体中):

eval find "$1" -iname "*.ppd" -exec 'bash -c grep "\*ModelName\:" "$1" | sed "s/.*\"\(.*\)\"/\1/" \;

find-exec-echo-missing-argument-to-exec中所述。 我怎样才能不仅在终端中使用第一个代码,而且还在bash脚本中工作?

P.S。:我仅使用eval将字符串"/<some_path>/{epson,epson_laser,epson_inkjet}"扩展为多个路径。有没有人知道更好的解决方案?

1 个答案:

答案 0 :(得分:0)

如果您想在find的输出上执行多个命令,只需多次使用-exec选项:

find -exec command1 "{}" \; -exec command2 "{}" \;

您还可以定义执行选项的条件:

find \( -exec command1 \; -false -o -exec command2 \; \)

在你的情况下,你需要这样的东西:

find /<some_path>/{epson,epson_laser,epson_inkjet} -iname "*.ppd" -exec grep "\*ModelName\:" "{}" \;  sed 's/.*\"\(.*\)\"/\1/' "{}" \;