2017-12-10 2 views
0

Ich versuche execlp mit find ... -exec ... zu laufen, und das find Programm konsequent sagt mir:execl + find + -exec: fehlende Argument `-exec‘

find: missing argument to `-exec' 

Was könnte falsch sein? Wenn ich mit diesen Argumenten auf meiner Shell finde, ist es erfolgreich.

Meine Funktion Anrufe folgen (nach bei verwandten suchen SO Fäden, ich mehrere Anordnungen der argmuments versucht haben):

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? unter Linux? vielleicht diese Tags hinzufügen. –

+0

@PatrickArtner: hinzugefügt – JellicleCat

Antwort

0

Wenn Sie den Befehl von C ausführen, müssen Sie das nicht \ vor ;

diese Syntax verwenden sollte

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

Wenn auf der Shell arbeiten, ; Marken das Ende eines Befehls, und es muss entgangen werden. execlp geht nicht durch die Shell, um einen Befehl auszuführen, es tut es sofort.


Bearbeiten - Sie eigentlich nur tun eine finden so dass dieser Teil ist nicht notwendig,

Darüber hinaus ist die exec Familie ersetzt den aktuellen Prozess mit dem angeforderten Befehl. Also nur die erste execlp wird ausgeführt.

Eine Lösung ist fork() für jeden find (eins nach dem anderen, warten auf den untergeordneten Prozess zu beenden, sonst wird die Ausgabe eine Mischung aller Ergebnisse sein).

Verwandte Themen