मैं ls कमांड को पाइप इनपुट कैसे निर्देशित कर सकता हूं?


20

जब मैं कुछ टाइप करता हूं:

find . -name *foo* | ls -lah

यह एक सादे lsकमांड के समान परिणाम देता है , हालांकि इसमें कोई इनपुट नहीं था।

तथापि:

ls -lah $( find . -name *foo* )

अच्छी तरह से काम करता है, लेकिन केवल जब findकमांड का परिणाम होता है।

क्या यह संभव है पाइप करने के लिए ls?


आपको यह निर्दिष्ट करने की आवश्यकता है कि क्या आप प्रत्येक खोज परिणाम के अंदर फ़ाइलों को ls करना चाहते हैं, या आप सीधे परिणाम खोजना चाहते हैं। यदि यह उत्तरार्द्ध है, तो यू / डेनिस का उत्तर सही उत्तर है।
rmutalik

जवाबों:


27

आप कमांड के -execसाथ उपयोग कर सकते हैं find

find . -name '*foo*' -exec ls -lah {} \;

आपके समाधान के लिए धन्यवाद। कोई पाइप नहीं है, लेकिन यह एक सुंदर तरीका है। यदि 'खोज' के साथ कोई परिणाम नहीं मिले हैं, तो यह कुछ भी प्रदर्शित नहीं करता है (जो वास्तव में अच्छा है)।
लासाल

7
थोड़ा बेहतर तरीका:find . -name '*foo*' -exec ls -lah {} +
jlliagre

20
find . -name *foo* | xargs -r ls -lah

वह काम करना चाहिए।


1
उस समाधान के लिए धन्यवाद। लेकिन मैं व्हाट्सएप से कैसे निपट सकता हूं?
लासाल

2
@ पसंदीदा तरीका ढूंढना -exec +(या -exec \;) का उपयोग करना है । xargsकेवल -0विकल्प के साथ उपयोग करने के लिए सुरक्षित है , जिसका अर्थ है कि आपको xargsNULL-बाइट्स के साथ आइटमों को परिसीमित करने के लिए जो भी कमांड देना है, उसे (\ 0)। findआप के साथ ऐसा कर सकते हैं -print0। xargs का -0 और find's -print0 मानक नहीं हैं, लेकिन -exec है, इसलिए यदि पोर्टेबिलिटी कभी कोई समस्या है, तो -exec के साथ ढूँढें का उपयोग करें।
जिरह


3

इसका उपयोग करें: (ls सॉर्ट कर सकते हैं, रिक्त स्थान या असामान्य वर्ण वाले फ़ाइलनाम के साथ काम करता है)

find . -name *foo* -print0 | xargs -0 ls -lah

"-print0" का अर्थ है कि फ़ाइल नाम जैसे null के बाद file foo 1आउटपुट मिलेगा find। Xggs का "-0" तर्क इसे इस तरह के इनपुट की अपेक्षा करता है, इसलिए रिक्त स्थान वाले फ़ाइलनामों को lsसही ढंग से कमांड पर लगाया जाता है।

xargsनिर्माण की तुलना में बेहतर कुछ मायनों में है find etc -exec ls {} \;क्योंकि फ़ाइल नाम सभी के लिए भेजे जाते हैं lsएक ही बार में, इसलिए यदि आप टाइमस्टैम्प (का उपयोग करके उन सब को क्रमबद्ध करना चाहते हैं ls), यह काम करता है की तरह कुछ:

find . -iname *pdf -print0 | xargs -0 ls -ltr

NetBSD सिस्टम पर, "-printx" भी एक विकल्प है (यह मेरे लिए एक उपयोगी तर्क लगता है, लेकिन जो भी हो, हमारे पास xargs -0 है और यह ठीक है):

find . -name *foo* -printx | xargs ls -lah (उबंटू के लिए नहीं)


ऐसा करने की कोशिश करने वालों के लिए, वास्तव में ls के छँटाई कार्यों का उपयोग करने में सक्षम होने के लिए मेरे लिए यह चाल चली।
हैरी मस्टो-प्लेफेयर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.