यह कैसे जांचा जाए कि दो निर्देशिका या फाइलें एक ही फाइल सिस्टम से संबंधित हैं या नहीं


15

यह जाँचने का सबसे अच्छा तरीका है कि क्या दो निर्देशिकाएँ एक ही फाइल सिस्टम से संबंधित हैं?

स्वीकार्य जवाब: बैश, अजगर, सी / सी ++।


यदि आप चाहते हैं अजगर / C ++ जवाब आप गलत साइट पर कर रहे हैं
माइकल Mrozek

अच्छा बिंदु - मुझे "अजगर, सी / सी ++ स्वीकार्य हैं" लिखना चाहिए।
ग्रेज़गोरज़ विएर्ज़ोवेकी

@MichaelMrozek याद रखें कि C API प्रश्न ऑन-टॉपिक हैं: meta.unix.stackexchange.com/questions/314/…
Grzegorz Wierzowiecki

जवाबों:


23

यह डिवाइस नंबरों की तुलना करके किया जा सकता है ।

लिनक्स पर एक शेल स्क्रिप्ट में इसे स्टेट के साथ किया जा सकता है :

stat -c "%d" /path  # returns the decimal device number 

में अजगर :

os.lstat('/path...').st_dev

या

os.stat('/path...').st_dev


3

मैं सिर्फ एक क्यूटी / सी ++ आधारित परियोजना में एक ही सवाल पर आया था, और यह सरल और पोर्टेबल समाधान पाया:

#include <QFileInfo>
...
#include <sys/stat.h>
#include <sys/types.h>
...
bool SomeClass::isSameFileSystem(QString path1, QString path2)
{
        // - path1 and path2 are expected to be fully-qualified / absolute file
        //   names
        // - the files may or may not exist, however, the folders they belong
        //   to MUST exist for this to work (otherwise stat() returns ENOENT) 
        struct stat stat1, stat2;
        QFileInfo fi1(path1), fi2(path2),
        stat(fi1.absoluteDir().absolutePath().toUtf8().constData(), &stat1);
        stat(fi2.absoluteDir().absolutePath().toUtf8().constData(), &stat2);
        return stat1.st_dev == stat2.st_dev;
}

बहुत विशिष्ट पुस्तकालय, भारी और मानक नहीं।
सैंडबर्ग

1

"स्टेट" उत्तर सबसे कठिन है, लेकिन यह गलत सकारात्मक हो जाता है जब दो फाइल सिस्टम एक ही डिवाइस पर होते हैं। यहाँ मैंने अब तक पाया सबसे अच्छा लिनक्स शेल तरीका है (यह उदाहरण बैश के लिए है)।

if [ "$(df file1 --output=target | tail -n 1)" == \
     "$(df file2 --output=target | tail -n 1)" ]
    then echo "same"
fi

(8.21 या नए कोर की आवश्यकता है)


इसके लिए कोर्यूटिल्स 8.21 या नए की आवश्यकता है। ( प्रतिबद्ध है कि सुविधा को जोड़ा) ( रिलीज नोट्स जो सुविधा की रिपोर्ट करते हैं)
कीथ रसेल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.