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 に答える