यूनिक्स: जाँच करें कि क्या फ़ाइल फ़ोल्डर है


3

इसलिए मुझे निर्देशिकाओं के एक पेड़ के माध्यम से लूप करने की आवश्यकता है, वर्तमान में मैं एक निर्देशिका में सभी फ़ाइलों को प्रिंट कर सकता हूं, लेकिन एक बार ऐसा करने के बाद मुझे शुरुआती निर्देशिका के सबफ़ोल्डर्स और इतने पर जाने में सक्षम होने की आवश्यकता है। मेरा प्रोग्राम एक शुरुआत के रूप में फ़ाइलों और फ़ोल्डरों को प्रिंट करता है, लेकिन मुझे यह सुनिश्चित करने के लिए प्रत्येक की जांच करने की आवश्यकता है कि यह एक निर्देशिका है और फिर इसे दर्ज करें। क्या कोई इस पर कुछ मार्गदर्शन दे सकता है?

जवाबों:


11

help test पैदावार

परीक्षण: परीक्षण [expr]

[...]

-d फाइल सही है अगर फ़ाइल एक निर्देशिका है।

[...]

बाहर निकलने की स्थिति:   EXPR सच का मूल्यांकन करता है तो सफलता लौटाता है; यदि EXPR झूठे का मूल्यांकन करता है या एक अमान्य तर्क दिया जाता है तो विफल हो जाता है।

test के साथ संक्षिप्त किया जा सकता है [, तो आप कर सकते हैं

if [ -d "$file" ]; then
    # do stuff
fi

2
test -d myFileOrFolder

लेकिन आप जो भी वर्णन करते हैं वह व्यवहार की तरह दिखता है find


1

टिप्पणियों में दर्ज कुछ प्रतिक्रियाओं से मैं अनुमान लगा रहा हूं कि आप प्रत्येक निर्देशिका में कुछ स्क्रिप्ट चलाना चाहते हैं। उस स्थिति में संभव तरीकों में से एक का उपयोग करना है find साथ में exec निम्नानुसार विकल्प:

find ./ -type d -exec sh -c "cd {} && <your_script_with_absolute_path>" \;

उदाहरण के लिए, वर्तमान डायर में एक स्क्रिप्ट है test.sh & Amp; आप इसे वर्तमान डायर में प्रत्येक उपखंड में निष्पादित करना चाहते हैं

find ./ -type d -exec sh -c "cd {} && `pwd`/test.sh" \;

को find आदेश -type d पथ में सभी निर्देशिकाओं को देखने के लिए कहेंगे ./ पहले तर्क के रूप में पारित किया गया। -exec इस तरह के प्रत्येक खोज के लिए इस मामले में कमांड निष्पादित करेगा sh -c जो एक शेल बना रहा है & amp; उद्धरण के साथ एक कमांड निष्पादित करना, {} द्वारा दिए गए तर्क को इंगित करता है find आदेश।
उम्मीद है की यह मदद करेगा!


0

उपयोग -d एक निर्देशिका के अस्तित्व के लिए परीक्षण करने के लिए ऑपरेटर:

if [ -d "$DIR" ]; then
    ...
fi

ठीक है, यह समझ में आता है, फिर मैं कैसे उस निर्देशिका में प्रवेश करूंगा और फिर से स्क्रिप्ट चलाऊंगा?

0

छद्म कोड:

[ -d your_filename ] && it's a folder ...

फिर मैं नई निर्देशिका में कैसे प्रवेश करूंगा और फिर अपनी स्क्रिप्ट को फिर से कॉल करूंगा?

0
find . -type d

यह सभी उपनिर्देशिका पाता है


फिर मैं नई निर्देशिका में कैसे प्रवेश करूंगा और फिर अपनी स्क्रिप्ट को फिर से कॉल करूंगा?

वहाँ एक है -execdir विकल्प और कुछ अन्य, आपके संस्करण के आधार पर find। आप इसे केवल थोड़ी देर के लूप में पाइप कर सकते हैं जो स्पष्ट रूप से प्रत्येक निर्देशिका का दौरा करता है।
Foo Bah

0

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

स्मृति से, आप शायद ऐसा कुछ चाहते हैं (का उपयोग करके) cat आपकी स्क्रिप्ट के लिए खड़े होने की आज्ञा):

find . -type f -exec cat {} \;

इस उदाहरण में, सभी गैर-निर्देशिका पूरे पेड़ (पुनरावर्ती) में फ़ाइलों को संसाधित किया जाएगा cat (मानक के लिए मुद्रित)।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.