2017-12-10 3 views
0

に不足している引数を私はfind ... -exec ...execlpを実行しようとしています、とfindプログラムは一貫して私に語った:EXECL +は-exec +見つける:「`-exec

find: missing argument to `-exec' 

間違っている可能性が何?これらの引数を使ってfindをシェルで実行すると、成功します。

私の関数呼び出しは、(スレッドSOの関連を見た後、私はargmumentsのいくつかの取り決めを試してみました)は、次のとおりです。

execlp("find","find","/home/me","-exec","/usr/bin/stat", "{}", "\\;",NULL); 
execlp("find","find","/home/me","-exec","/usr/bin/stat", "'{}'", "\\;",NULL); 
execlp("find","find","/home/me","-exec","/usr/bin/stat", "{}", "';'",NULL); 
execlp("find","find","/home/me","-exec","/usr/bin/stat {} \\;",NULL); 
+0

execlp == C? Linuxの下で?おそらくそれらのタグを追加します。 –

+0

@PatrickArtner:added – JellicleCat

答えて

0

あなたはCからのコマンドを実行すると、あなたが;\を必要としません。

execlp("find","find","/home/me","-exec","/usr/bin/stat", "{}", ";",NULL); 

シェル上、;マークを動作するはずです。この構文を使用しますコマンドの終わりであり、エスケープする必要があります。 execlpは、コマンドを実行するためにシェルを通過せず、ただちに実行します。


編集 - あなたが実際に一つだけ見つけるんので、この部分はexec家族が要求されたコマンドを使用して、現在のプロセスを置き換え、

また必要はありません。最初のexeclpだけが実行されます。

解答は、それぞれfind(1つずつ、子プロセスが終了するのを待って、そうでない場合はすべての結果が混在している)でfork()になります。