0

当我在命令行中准确键入以下内容时,以下内容可以正常工作:

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

但是,当我尝试从 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 脚本中都可以使用第一个代码?

PS:eval只用于将字符串扩展"/<some_path>/{epson,epson_laser,epson_inkjet}"到多个路径。有谁知道这样做的更好解决方案?

4

1 回答 1

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/' "{}" \;
于 2012-12-21T17:00:16.120 回答