केवल आधार फ़ाइल नाम मुद्रित करने के लिए `ls` बताएं


21

यह डिफ़ॉल्ट व्यवहार है ls

ls /net/nas/data/languages/pypm/sites/rex/free/2.6/*/pool/v/vi/virtual*1.4.4*pypm
/net/nas/data/languages/pypm/sites/rex/free/2.6/linux-x86/pool/v/vi/virtualenv-1.4.4_linux-x86_2.6_1.pypm
/net/nas/data/languages/pypm/sites/rex/free/2.6/linux-x86_64/pool/v/vi/virtualenv-1.4.4_linux-x86_64_2.6_1.pypm
/net/nas/data/languages/pypm/sites/rex/free/2.6/macosx/pool/v/vi/virtualenv-1.4.4_macosx_2.6_1.pypm
/net/nas/data/languages/pypm/sites/rex/free/2.6/win32-x86/pool/v/vi/virtualenv-1.4.4_win32-x86_2.6_1.pypm

मैं lsप्रिंट कैसे बनाऊंगा? पसंद:

ls $OPTIONS /net/nas/data/languages/pypm/sites/rex/free/2.6/*/pool/v/vi/virtual*1.4.4*pypm
virtualenv-1.4.4_linux-x86_2.6_1.pypm
virtualenv-1.4.4_linux-x86_64_2.6_1.pypm
virtualenv-1.4.4_macosx_2.6_1.pypm
virtualenv-1.4.4_win32-x86_2.6_1.pypm

नोट : मैं शेल find/ नेट / nas / डेटा / भाषाओं / pypm / साइट्स / रेक्स / फ्री के रूप में उपयोग करने से अधिक शेल फ़ाइलों और निर्देशिकाओं को पसंद करता हूं ।


1
जब शेल में बहुत सारी फाइलें होती हैं तो आप शेल का उपयोग करते हुए गोलाकार पसंद करते हैं? टाइपो ??
अकीरा

1
मेरा अनुमान है कि कि ओपी उपनिर्देशिका की एक सूची नहीं चाहता है, और पास करने का विकल्प होने की जानकारी नहीं -maxdepth 1करने के लिए find
intuited

जवाबों:


19

हालांकि xargs -0, इनपुट 0 के लिए सीमांकित (जैसे find -print0) उपयोग किए जाने का इरादा है , lsइस तरह से इसके आउटपुट को परिसीमित करने का कोई विकल्प नहीं है।

तथापि,

ls -1 /path/glob | tr '\n' '\0' | xargs -0 -n 1 basename

रास्ते में nulls करने के लिए newlines कन्वर्ट करने के लिए चाल करना होगा। यह तब xargs को उन नामों के साथ काम करने की अनुमति देता है जिनके पास रिक्त स्थान हैं।

संपादित करें: -n 1xargs में जोड़ा गया


यह मेरे लिए काम नहीं करता है: basename: extra operand \ 033 [0m / net / nas / data / languages ​​/ pypm / sites / rex / free / 2.6 / macosx / pool / v / vi / virtualenv-1.4.4_macoset_2.6_1.pypm \ 033 [ 0m'`
श्रीद का कहना है कि मोनिका

@ श्रीधर: आपको -n 1विकल्प के रूप में कहीं और सुझाव देने की आवश्यकता हो सकती है xargs? (उत्तर संपादित)
स्टीव फ़ॉली

हालांकि मैं व्यक्तिगत रूप से अपना खुद का जवाब पसंद करता हूं (जैसा कि लगभग मुझे फ़ाइलनामों में रिक्त स्थान से निपटने के लिए नहीं है), मैं इसे चिह्नित करूंगा क्योंकि यह उत्तर रिक्त स्थान को भी संभालता है।
श्रीद कहते हैं, मोनिका

यदि xargs का मैक संस्करण -d(सीमांकक) विकल्प का समर्थन करता है , तो आप कर सकते हैं ls ... | xargs -d '\n' -n 1 basename
intuited

12

मैं इसका उपयोग करता हूं:

ls | tr '\n' '\n'

यह एक सूची देता है जैसे:

file1.mp3
file2.mp3
file3.mp3
...

3
यह अनिवार्य रूप से ls -1(और रंगाई अक्षम) के समान है, जैसा lsकि उन लोगों से तात्पर्य है जब वे टर्मिनल पर नहीं लिखते हैं। ऐसा लगता है कि आप बिंदु को थोड़ा याद कर रहे हैं, क्योंकि यह मुद्दा lsवाइल्ड कार्ड का उपयोग करके पथ तर्क को निर्दिष्ट करने वाले dir नाम को अलग कर रहा है। ls -d "$PWD/"* | tr '\n' '\n'यह देखने की कोशिश करें कि वास्तविक मुद्दा क्या है।
डैनियल बेक

-1 - निश्चित नहीं है कि लोग इस उत्तर को क्यों छोड़ रहे हैं। न केवल यह वैसा ही काम करता है ls -1, यह तब भी काम नहीं करता है जब ग्लब्स का इस्तेमाल किया गया हो, जैसा कि डेनियल बेक ने बताया।
slhck

-1 - यह जैसा है ls -1, और केवल वर्तमान निर्देशिका में काम करता है, जैसे पथ के साथ नहीं ls path/*
ब्रेंडन





1

आपने कहा कि आप ग्लोबिंग ओवर पसंद करते हैं find, लेकिन क्या आप जानते हैं कि दोनों परस्पर अनन्य नहीं हैं? ग्लोबिंग आपके द्वारा चलाए जा रहे किसी भी कमांड पर होता है, न कि सिर्फ ls। उदाहरण के लिए:

$ export BASE=/net/nas/data/languages/pypm/sites/rex/free/2.6

$ echo $BASE/*/pool/v/vi/virtual*1.4.4*pypm | xargs basename
$ ls $BASE/*/pool/v/vi/virtual*1.4.4*pypm | xargs basename
$ find $BASE/*/pool/v/vi/virtual*1.4.4*pypm -print0 | xargs -0 basename

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

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

$ find $BASE/*/pool/v/vi/virtual*1.4.4*pypm -printf '%f\n'

दुर्भाग्यवश, -printfMacOSX संस्करण में विकल्प उपलब्ध नहीं है find
श्रीद का कहना है कि

अच्छा निर्णय; निरीक्षण के लिए माफी। मैंने जवाब अपडेट कर दिया है।
रयान ब्राइट

-3

उस निर्देशिका में जाएं जहां आपके पास सभी फाइलें हैं और टाइप करें।

find *.pypm

1
ओपी ने स्पष्ट रूप से घोषित किया कि वह उपयोग नहीं करना चाहता find
ग्रोनोस्तज

1
इसके अलावा, यह भी नहीं है कि ओपी की जरूरत क्या है। (नोट: आप का उपयोग करना चाहिए find . -name '*pypm'अगर ... बस ग्लोब लगाने से आगे कुछ भी नहीं मिल रहा है - तो आप बस लिख सकते हैं ls *.pypm।)
slhck
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.