2009-12-23 8 views
9

मैं जानना चाहता हूं कि मैं पृष्ठभूमि में xargs द्वारा उत्पन्न कमांड को कैसे भेज सकता हूं। उदाहरण के लिए, पर विचारपृष्ठभूमि से xargs द्वारा बनाई गई कमांड को भेजना

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

मैं

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

.. और के रूप में अप्रत्याशित की कोशिश की, यह बजाय पृष्ठभूमि को xargs भेजने के लिए लगता है?

मैं कंप्रेसर कमांड का प्रत्येक उदाहरण पृष्ठभूमि पर कैसे जा सकता हूं?

उत्तर

5

SunOS के लिए आप जीएनयू पर एक नज़र समानांतर हो सकता है http://www.gnu.org/software/parallel/

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

यह है बाहर crapping नहीं फ़ाइल नाम 'शामिल है "या अंतरिक्ष। जोड़ना -j + 0 कर देगा अगर के अतिरिक्त लाभ यह सीपीयू कोर प्रति एक संपीड़ित चलाने

6

आप शायद कंप्रेसर को कॉल करने के लिए एक बहुत तेज़ शेलस्क्रिप्ट बना सकते हैं।

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

तो

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

हालांकि मुझे लगता है कि आप इस xargs का उपयोग कर प्रसन्न थे तर्क:

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

यह आदेश खोजना चाहिए/टी/एक समय में 10 फ़ाइलें सेक अपनी किया जब तक , साथ ही कॉलिंग स्क्रिप्ट/खोल पर तुरंत नियंत्रण लौट रहा है।

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

यूनिक्स मेरे पास है ((करने के लिए सुनिश्चित एक नई प्रक्रिया प्रत्येक फ़ाइल के लिए आप सेक करना चाहते है कि वहाँ बनाता है आप -n 1 के साथ इस गठबंधन करने के लिए चाहते हो सकता है) $ uname -एक SunOS xxx 5.10 Generic_xx7xx1- 06 sun4u sparc SUNW, Sun-Fire) में नहीं है -पी ($ xargs -P xargs: अवैध विकल्प - पी xargs: उपयोग: xargs: [-t] [-p] [-e [eofstr]] [ -E eofstr] [-I replstr] [-i [replstr]] [-L #] [-l [#]] [-n # [-x]] [-s आकार] [cmd [args ...] ]) शैल स्क्रिप्ट रैपर की तुलना में कोई अन्य विकल्प? – PoorLuzer

+1

क्षमा करें, मुझे सनोस के लिए बहुत कुछ नहीं मिल रहा है - हालांकि मुझे यह पैकेज "xjobs" मिला है जिसे आप संकलित करने में सक्षम हो सकते हैं ... http://www.maier-komor.de/xjobs।एचटीएमएल – gnarf

2

यह मेरे लिए काम करता है जब मैं सभी फ़ाइलें foo शामिल

ग्रेप -rl foo ./ संपादित करना चाहते हैं |। `xargs emacs` &

9

पृष्ठभूमि में xargs लक्ष्यों को चलाने के लिए --max-procs/-P विकल्प का उपयोग करें। जीएनयू xargs संस्करण 4.2.27 के आदमी पृष्ठ से:

--max-procs = अधिकतम-procs, -पी अधिकतम-procs

एक समय में अधिकतम-procs प्रक्रियाओं अप करने के लिए चलाने के लिए; डिफ़ॉल्ट 1 है। यदि अधिकतम-प्रो 0 है, तो xargs एक समय में जितनी संभव हो उतनी प्रक्रियाएं चलाएंगे। -पी विकल्प के साथ -एन विकल्प का प्रयोग करें; अन्यथा संभावना है कि केवल एक ही निष्पादन किया जाएगा।

+0

(हम्म, मुझे एहसास हुआ कि मेरा जवाब gnarf के उत्तर के दूसरे भाग का डुप्लिकेट है, जिसे मैंने खोल स्क्रिप्ट लिखने के बारे में शुरुआती टिप्पणी के बाद नहीं पढ़ा था। अगर मैं दूसरों को भी स्कीम करता हूं तो मैं अपना जवाब यहां छोड़ दूंगा gnarf का जवाब मैंने किया था) – RobM