2012-05-22 12 views
5

निम्नलिखित काम करता है कोई समस्या नहींजावा निष्पादित कमांड लाइन कार्यक्रम 'खोज' टर्मिनल से रिटर्न त्रुटि

find testDir -type f -exec md5sum {} \; 

कहाँ testDir एक निर्देशिका है कि कुछ फ़ाइलें (उदाहरण के file1, करें 2 और file3 के लिए) शामिल हैं।

हालांकि, मैं जावा

में निम्नलिखित का उपयोग कर कोई त्रुटि मिलती है
Runtime rt = Runtime.getRuntime(); 
Process pr = rt.exec("find testDir -type f -exec md5sum {} \\;"); 

त्रुटि

find: missing argument to `-exec' 

मेरा मानना ​​है कि मैं सही ढंग से पात्रों से बचने कर रहा हूँ। मैंने कई अलग-अलग प्रारूपों की कोशिश की है और मैं इसे काम पर नहीं ला सकता हूं।

अद्यतन @jtahlborn पूरी तरह से प्रश्न का उत्तर दिया। लेकिन md5sum की गणना करने से पहले कमांड को डीआईआर में प्रत्येक फ़ाइल को सॉर्ट करने के लिए थोड़ा बदल गया है और निम्नानुसार है (मैंने मूल प्रश्न के लिए पहले से ही उत्कृष्ट उत्तर स्वीकार कर लिया है, इसलिए यदि वे प्रारूप के साथ आ सकते हैं तो मैं किसी को एक बियर खरीदूंगा । इस के लिए मैं हर संयोजन मुझे कोई सफलता के साथ नीचे इस सवाल का जवाब निम्नलिखित के बारे में सोच सकते हैं की कोशिश की है)

"testDir प्रकार च -exec md5sum {} + लगता है |। awk {$ 1 प्रिंट} | तरह | md5sum , "

नई अद्यतन

पाइप के लिए, आप मुझे इस के साथ समाप्त हो गया तो एक खोल की जरूरत है, जो अच्छा काम करता है और आप अभी भी उत्पादन प्राप्त कर सकते हैं।

Runtime rt = Runtime.getRuntime(); 
Process pr = rt.exec(new String[] 
{ 
    "sh", "-l", "-c", "find " + directory.getPath() + " -type f -exec md5sum {} + | awk '{print $1}' | sort | md5sum" 
}); 
+0

आपको प्रतिक्रिया कैसे प्राप्त होती है? ए [एसएससीसीई] (http://SSCCE.org) ठीक होगा। –

उत्तर

5

निष्पादन के लिए बहु-तर्क कॉल का उपयोग करें (अन्यथा आप भागने के नियमों से काट सकते हैं)। भी, आप एक खोल स्क्रिप्ट से फोन नहीं कर रहे हैं के बाद से, आप अर्धविराम से बचने के लिए की जरूरत नहीं है:

Process pr = rt.exec(new String[]{"find", "testDir", "-type", "f", "-exec", "md5sum", "{}", ";"}); 
+0

शानदार। मैंने पहले यह कोशिश की लेकिन पूरे निष्पादन पैरा एक स्ट्रिंग के रूप में थे - "-exec", "md5sum {};" –

+1

या Runtime.getRuntime()। Exec ("testDir -type f -exec md5sum {} \\;"। Split ("")); – ianpojman

+0

ठीक है, मैं आपको एक बियर खरीदूंगा यदि आप इसे "प्रारूप testDir -type f -exec md5sum {} + | awk {print $ 1} | sort | md5sum;" प्रारूपित कर सकते हैं। –

0

पाइप जैसी चीजों के लिए, आप एक खोल जो आप Runtime.exec साथ नहीं मिलता है की जरूरत है।

Runtime rt = Runtime.getRuntime(); 
Process pr = rt.exec(new String[] 
{ 
    "sh", "-l", "-c", "find " + directory.getPath() + " -type f -exec md5sum {} + | awk '{print $1}' | sort | md5sum" 
});