find: missing argument to

The following works fine when I type it exactly in the command line:

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

However, when I try to call the following from a bash script I get find: missing argument to -exec' .

I have also tried the following (in many variants):

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

as was mentioned in find-exec-echo-missing-argument-to-exec. How can I get to work first code not only in terminal, but also in bash script?

PS: I've used eval only for expanding string "/<some_path>/{epson,epson_laser,epson_inkjet}" to multiple paths. Does anyone know better solution for doing this?


If you want to execute multiple commands over the output of find , just use the -exec options as many times required:

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

You can also define the conditions to execute an option:

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

In your case, you need something like this:

find /<some_path>/{epson,epson_laser,epson_inkjet} -iname "*.ppd" -exec grep "*ModelName:" "{}" ;  sed 's/.*"(.*)"/1/' "{}" ;
链接地址: http://www.djcxy.com/p/78332.html

上一篇: 在Linux CLI中使用相对于当前目录的路径递归列出文件

下一篇: 找到:缺少参数