2010-08-20 11 views
31

हम विशिष्ट प्रकार की फ़ाइलों को कैसे देख सकते हैं i.e. doc pdf फ़ाइलें नेस्टेड निर्देशिकाओं में मौजूद हैं।शैल में रिकर्सिव निर्देशिकाओं में विशिष्ट प्रकार की फ़ाइलों को कैसे सूचीबद्ध करें?

आदेश मैंने कोशिश की:

$ ls -R | grep .doc 

लेकिन अगर वहाँ alok.doc.txt की तरह एक फ़ाइल का नाम है आदेश जो स्पष्ट रूप से नहीं है जो मैं चाहता भी है कि प्रदर्शित करेगा। इसके बजाय मुझे किस कमांड का उपयोग करना चाहिए?

उत्तर

52

है आप "ls" और "grep" के साथ और अधिक आरामदायक हैं

find /path -type f \(-iname "*.doc" -o -iname "*.pdf" \) 

: स्वचालित प्रसंस्करण के लिए उन्नत क्वेरी किए जाने के लिए, आप और अधिक शक्तिशाली find आदेश का उपयोग करना चाहिए , आप grep कमांड में एक नियमित अभिव्यक्ति का उपयोग कर सकते हैं (अंत '$' वर्ण इंगित करता है कि .doc लाइन के अंत में होना चाहिए। वह "file.doc.txt" को बाहर कर देगा):

ls -R |grep "\.doc$" 

the man में नियमित अभिव्यक्तियों के साथ grep का उपयोग करने के बारे में अधिक जानकारी।

+3

+1, प्रतिदिन लिनक्स के बारे में कुछ नया सीखना। –

+1

शायद डॉट से बचने के लिए अच्छा है, अन्यथा 'hellodoc' जैसी फ़ाइल भी मेल खाती है। 'एलएस-आर | grep "\ .doc $" ' – fedorqui

+4

क्या इस शो को आपको उस फाइल का पूरा पथ दिखाने का कोई तरीका है जिसे 'ls' मिलता है? अभी मैं सिर्फ सभी फाइलों की एक सूची है, लेकिन मुझे नहीं पता कि वास्तव में उन्हें कैसे ढूंढें। – Russell

29

ls कमांड आउटपुट मुख्य रूप से मनुष्यों द्वारा पढ़ने के लिए है। के रूप में अगर आप बैश 4.0 ++

#!/bin/bash 
shopt -s globstar 
shopt -s nullglob 
for file in **/*.{pdf,doc} 
do 
    echo "$file" 
done 
+0

यह **/*। पीडीएफ **/*। दस्तावेज़ है - आप इसके बिना उप निर्देशिकाओं में रिकर्स नहीं कर रहे हैं – Petesh

+0

इसके वास्तव में डबल एस्टरिक्स – ghostdog74

+7

आप 'ls **/*। {Pdf, doc} कर सकते हैं। या '**/* में फ़ाइल के लिए। {पीडीएफ, डॉक्टर} ' –

2

अन्य तरीकों कि इस्तेमाल किया जा सकता से कुछ:

echo *.{pdf,docx,jpeg}

stat -c %n * | grep 'pdf\|docx\|jpeg'

-1

इसी प्रकार यदि आप वाइल्डकार्ड वर्ण * (काफी regex सुझाव की तरह नहीं) का उपयोग कर पसंद करते हैं तो आप सिर्फ ls उपयोग कर सकते हैं प्रति पृष्ठ एक फ़ाइल (जैसे grep) और -R ध्वज की तरह एक फ़ाइल सूचीबद्ध करने के लिए -l ध्वज दोनों के साथ। फिर आप उन फ़ाइलों को निर्दिष्ट कर सकते हैं जिन्हें आप *.doc आईई के साथ खोजना चाहते हैं। या तो

ls -l -R *.doc 

या यदि आप इसे कम लाइनों पर फ़ाइलों को सूचीबद्ध करना चाहते हैं।

ls -R *.doc 
+0

क्या आपने इसे चलाने का प्रयास किया था? mkdir tmp; सीडी टीएमपी; mkdir ए; एक/a.doc स्पर्श करें; ls -l -R * .doc –

1
find . | grep "\.doc$" 

यह रूप में अच्छी तरह पथ दिखाएंगी।

संबंधित मुद्दे