मैं अन्य कार्यक्रमों में फ़ाइल नामों को पाइप करना चाहता हूं, लेकिन जब नाम में रिक्त स्थान होते हैं, तो वे सभी चोक कर देते हैं।
मान लीजिए कि मेरे पास एक फाइल है।
foo bar
मुझे find
सही नाम कैसे वापस मिल सकता है ?
जाहिर है मैं चाहता हूं:
foo\ bar
या:
"foo bar"
संपादित करें : मैं नहीं जाना चाहता xargs
, मैं सही ढंग से स्वरूपित स्ट्रिंग प्राप्त करना चाहता हूं find
ताकि मैं फ़ाइल नामों के स्ट्रिंग को सीधे दूसरे प्रोग्राम में पाइप कर सकूं।
find
फ़ाइल नामों को केवल ठीक स्वरूपित करता है; उन्हें प्रति पंक्ति एक नाम लिखा जाता है। (बेशक, यह अस्पष्ट है अगर एक फ़ाइल नाम में एक नया वर्ण है।) तो समस्या यह है कि रिसीविंग एंड "चोकिंग" जब इसे एक जगह मिलती है, तो इसका मतलब है कि आपको हमें यह बताना होगा कि यदि आप एक सार्थक उत्तर चाहते हैं ।
find
में शेल के लिए उपयुक्त प्रारूप में आउटपुट फ़ाइल नामों के विकल्प की पेशकश करने के लिए (कहना) के लिए समझ में आएगा । सामान्य तौर पर, हालांकि, -print0
GNU find
एक्सटेंशन कई अन्य परिदृश्यों (भी) के लिए ठीक काम करता है, और आपको इसे किसी भी घटना में उपयोग करना सीखना चाहिए।
ls $(command...)
सूची के माध्यम से फ़ीड नहीं करता है stdin
। यह $(command...)
सीधे कमांड लाइन में आउटपुट डालता है । उस स्थिति में, यह शेल है जो सी से पढ़ रहा है, और यह $IFS
आउटपुट के शब्दों को निर्धारित करने के वर्तमान मूल्य का उपयोग करेगा । सामान्य तौर पर, आप उपयोग करना बेहतर समझते हैं xargs
। आपको एक प्रदर्शन हिट की सूचना नहीं होगी।
find -printf '"%p"\n'
प्रत्येक पाए गए नाम के आसपास दोहरे उद्धरण चिह्नों को जोड़ देगा, लेकिन फ़ाइल नाम में किसी भी दोहरे उद्धरण को ठीक से उद्धृत नहीं करेगा। यदि आपके फ़ाइल नामों में कोई एम्बेडेड दोहरे उद्धरण नहीं हैं, तो आप समस्या को अनदेखा कर सकते हैं: या पाइप के माध्यम से sed 's/"/&&/g;s/^""/"/;s/""$/"/'
। यदि आपकी फ़ाइल के नाम शेल द्वारा नियंत्रित किए जा रहे हैं, तो आपको संभवतः दोहरे उद्धरणों के बजाय एकल उद्धरणों का उपयोग करना चाहिए, हालांकि (अन्यथा sweet$HOME
कुछ ऐसा ही हो जाएगा sheet/home/you
)। और यह अभी भी फ़ाइल नामों के खिलाफ बहुत मजबूत नहीं है, जिसमें वे नई सुर्खियों में हैं। आप उन्हें कैसे संभालना चाहते हैं?
-exec
झंडे के बारे में जानते हैंfind
? आप संभावित रूप से इस त्रुटि को कम कर सकते हैं और-exec
अन्य कमांडों को पाइप करने के बजाय अपनी कमांड को अधिक कुशल बना सकते हैं । बस मेरा $ .02