2009-12-23 15 views
9

Chcę wiedzieć, w jaki sposób mogę wysłać komendę (s) spawnowane przez xargs do tła. Na przykład, rozważmyWysyłanie poleceń zeskanowanych przez xargs do tła

find . -type f -mtime +7 | tee compressedP.list | xargs compress 

Próbowałem

find . -type f -mtime +7 | tee compressedP.list | xargs -i{} compress {} & 

.. i tak nieoczekiwany, wydaje się, aby wysłać xargs do tła zamiast?

Jak ustawić, aby każda instancja komendy compress działała w tle?

Odpowiedz

5

Na SunOS może trzeba spojrzeć na GNU Parallel http://www.gnu.org/software/parallel/

find . -type f -mtime +7 | tee compressedP.list | parallel compress 

ma dodatkową korzyść nie crapping się, czy nazwa pliku zawiera "" lub spacja. Dodanie -j + 0 uczyni go uruchomić jeden kompres na jeden rdzeń procesora

6

Prawdopodobnie mógłbyś zrobić szybki skorupiak, aby wywołać kompres.

#!/bin/sh 
# call it 'compbg' and chmod a+x 
compress $* & 

następnie

find . -type f -mtime +7 | tee compressedP.list | xargs -I{} compbg {} 

Chociaż myślę, że może być szczęśliwszy za pomocą tego xargs argumentem:

-P maxprocs 
     Parallel mode: run at most maxprocs invocations of utility at once. 

Komenda ta powinna znaleźć/tee/skompresować 10 plików na raz, aż jego done , a także natychmiastowa kontrola nad skryptem/powłoką wywołującą.

find . -type f -mtime +7 | tee compressedP.list | xargs -I{} -P10 compress {} & 
+0

UNIX mam ($ uname -a SunOS xxx 5.10 Generic_xx7xx1- 06 sun4u sparc SUNW, Sun-Fire) nie ma -P ($ xargs -P xargs: nielegalna opcja - P xargs: Użycie: xargs: [-t] [-p] [-e [eofstr]] [ -E eofstr] [-I replstr] [-i [replstr]] [-L #] [-l [#]] [-n # [-x]] [-s rozmiar] [cmd [argumenty ...] ]) Jakieś inne alternatywy niż opakowanie skryptu powłoki? – PoorLuzer

+1

Niestety, nie mogę znaleźć wiele dla SunOS - chociaż znalazłem ten pakiet "xjobs", który możesz skompilować ... http://www.maier-komor.de/xjobs.html – gnarf

2

działa to na mnie, kiedy chcesz edytować wszystkie pliki, które zawierają foo

grep -rl foo ./. | `xargs emacs` &

9

Użyj opcji --max-procs/-P do uruchamiania celów xargs w tle. Od strony man GNU xargs wersji 4.2.27:

--max-PROC = maks-proca, -P max-proc

uruchomić do max-proc procesów na raz; wartość domyślna to 1. Jeśli max-procs wynosi 0, xargs uruchomi tyle procesów, ile tylko się da. Użyj opcji -n z opcją -P; w przeciwnym razie możliwe jest wykonanie tylko jednego exec.

(Możesz połączyć to z -n 1 do upewnia się, że pojawił się nowy proces dla każdego pliku, który chcesz skompresować)

+0

(Hmm, właśnie uświadomiłem sobie, że moja odpowiedź jest duplikatem drugiej połowy odpowiedzi gnarfa, której nie przeczytałem po komentarzu otwierającym na temat pisania skryptu powłoki.) Zostawię tutaj swoją odpowiedź na wypadek, gdyby inni również przejrzeli odpowiedź gnarfa tak jak ja) – RobM

Powiązane problemy