2008-11-17 17 views
11

शैल स्क्रिप्ट या पर्ल में प्रोग्रामेटिक रूप से बताने के लिए एक त्वरित और गंदा तरीका है, चाहे कोई पथ दूरस्थ फाइल सिस्टम (एनएफएस या पसंद) या स्थानीय पर स्थित है? या पार्स/etc/fstab के लिए ऐसा करने का एकमात्र तरीका है और फाइल सिस्टम प्रकार की जांच करें?मैं कैसे बता सकता हूं कि फ़ाइल पर्ल के साथ रिमोट फाइल सिस्टम पर है या नहीं?

उत्तर

13

stat -f -c %T <filename> आपको जो चाहिए वह करना चाहिए। आप -l

+2

फिर, सोलारिस को पोर्टेबल नहीं (हालांकि मेरे पास मशीन पर कमांड है, यह मानक मुद्दा नहीं है)। –

2

आप निर्देशिका के लिए फाइल सिस्टम प्रकार प्राप्त करने के लिए "df -T" का उपयोग कर सकते हैं, या विशिष्ट प्रकार (जैसे nfs) को रिपोर्टिंग सीमित करने के लिए -t विकल्प का उपयोग कर सकते हैं और यदि यह "संसाधित कोई फ़ाइल सिस्टम" के साथ वापस आता है, तो यह उन लोगों में से एक नहीं है जिन्हें आप ढूंढ रहे हैं।

df -T $dir | tail -1 | awk '{print $2;}' 
+1

पोर्टेबल नहीं - उदाहरण के लिए, 'डीएफ-टी' सोलारिस पर काम नहीं करता है। –

+0

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

0

कुछ सिस्टमों पर, डिवाइस संख्या एनएफएस फ़ाइलों के लिए नकारात्मक हो सकती है। इस प्रकार,

print "remote" if (stat($filename))[0] < 0 
2

आप df एक निर्देशिका पर केवल उपकरण के जानकारी पाने के लिए यह में रहता है, उदाहरण के लिए उपयोग करते हैं वर्तमान निर्देशिका के लिए:

df . 

फिर, आप आउटपुट को पार्स कर सकते हैं, उदा। डिवाइस नाम प्राप्त करने के लिए

df . | tail -1 | awk '{print $1}' 

। में:

1

मैं solaris7,8,9 & 10 पर निम्नलिखित परीक्षण किया है और यह विश्वसनीय प्रतीत हो रहा है

/bin/df -g <filename> | tail -2 | head -1 | awk '{print $1}' 

बल्कि एक के लिए मैच के लिए कोशिश कर रहा से आप एफएस प्रकार देना चाहिए "पथ मेजबान" आपका माउंट प्वाइंट