2012-07-25 15 views
22

में लाइनों की संख्या मुद्रित करने का प्रयास करते समय "xargs unterminated उद्धरण" त्रुटि प्राप्त करना मैं अपने आवेदन में लाइनों की संख्या प्राप्त करना चाहता हूं।टर्मिनल

find . "(" -name "*.m" -or -name "*.h" ")" -print | xargs wc -l 

यह अन्य अनुप्रयोगों में ठीक काम कर रहा है, लेकिन मेरे अनुप्रयोगों में से एक के लिए यह त्रुटि दे रहा है "समाप्त नहीं की गई बोली xargs": मैं इस कोड का उपयोग कर रहा हूँ।

उत्तर

49

क्या आपके फ़ाइल नामों में से कोई एक उद्धरण है? कुछ इस तरह का प्रयास करें:

find . "(" -name "*.m" -or -name "*.h" ")" -print0 | xargs -0 wc -l 

-print0 तर्क find बताता प्रत्येक ऐसा नाम है जो इसे बाहर प्रिंट समाप्त करने के लिए शून्य चरित्र का उपयोग करने के। -0 तर्क xargs बताता है कि इसके इनपुट टोकन न्यूल-टर्मिनेटेड हैं। यह उन पात्रों के साथ मुद्दों से बचाता है जिन्हें अन्यथा विशेष रूप से उद्धरणों के रूप में माना जाएगा।

+0

बहुत बहुत शुक्रिया गैरी – Lena

+3

मैं सभी .svn फ़ोल्डर निकालने का प्रयास किया और नीचे मेरे लिए काम किया है "किसी भी उपनाम के बिना आदेश चला": लगता है ./ - नाम ".svn" -print0 | xargs -0 rm -Rf –

+0

कुछ स्पष्टीकरण स्वागत होंगे;) – AsTeR

7

क्योंकि आप एक फ़ाइल नाम कहीं में एक भी बोली है यह हो सकता है ...

यानी ->'

समस्या फ़ाइल ढूंढने के लिए, टर्मिनल में निम्नलिखित चलाएँ:

\find . | grep \' 

और यह भी हो सकता है यदि आपके पास xargs सेटअप के लिए कोई उपनाम है जो कोई समस्या उत्पन्न कर रहा है। यह जांचने के लिए कि क्या यह मामला है, बस इसके सामने '\' के साथ xargs चलाएं, उदा।

\find . | \xargs .... 

"\" सीधा सा अर्थ