2013-11-22 22 views
6

Ich will laufen:bash: -exec in Befehl find und &

./my_script.py a_file & 

... auf alle Dateien im aktuellen Ordner, der mit .my_format enden, so dass ich tun:

find . -type f -name "*.my_format" -exec ./my_script {} & \; 

aber es funktioniert nicht. Wie sollte ich & in den -exec Parameter aufnehmen?

+2

mögliche Duplikate von [Kann die Funktion "Exec" des Find-Befehls ein Programm im Hintergrund starten?] (Http://stackoverflow.com/questions/853451/can-the-find-commands-exec-feature-start-a-program-im-hintergrund) – eran

+0

gibt es einen Punkt darauf, es ein Jahr später darauf zu verweisen? –

+1

Ich habe diese Frage, wenn ich mit diesem Problem konfrontiert bin, und es ist definitiv keine schlechte Frage. An dieser Stelle ist die Erwähnung eines Duplikats eine Möglichkeit, zukünftigen Lesern mitzuteilen, dass andere Antworten verfügbar sind, das ist alles. – eran

Antwort

8

Try this:

$ find . -type f -name "*.my_format" -exec sh -c './my_script {} &' \; 

Der meist wahrscheinliche Grund Ihr Versuch nicht funktionierte, weil die Suche nach dem mit einem der exec(3) Familie von Standard-Befehl ausführt c Bibliotheksaufrufe, die die Jobsteuerung nicht verstehen - das & Symbol. Die Shell versteht den Befehl "run this command im Hintergrund", daher die -exec sh ... Aufruf

+0

Oh ok, danke. Also ist 'sh' die Basis-Shell auf allen Linux-Maschinen, oder? –

+0

Zuletzt verwendete Linux-Distributionen symlinks/bin/sh zu einer Shell, die posix-sh-konform ist. – holygeek

+0

Wenn wir eine neue Shell für jede Ausführung erstellen, warum müssten wir auch den ausgeführten Befehl im Hintergrund hinzufügen? –

4

Probieren Sie diesen Befehl finden:

find . -type f -name "*.my_format" -exec bash -c './my_script "$1" &' - '{}' \;