দুটি ডিরেক্টরি বা ফাইল একই ফাইল সিস্টেমের অন্তর্ভুক্ত কিনা তা কীভাবে পরীক্ষা করবেন


15

দুটি ডিরেক্টরি একই ফাইল সিস্টেমের অন্তর্ভুক্ত কিনা তা যাচাই করার সর্বোত্তম উপায় কী?

গ্রহণযোগ্য উত্তর: বাশ, পাইথন, সি / সি ++।


আপনি যদি অজগর / সি ++ উত্তর চান তবে আপনি ভুল সাইটে
রয়েছেন

ভালো কথা - আমার "পাইথন, সি / সি ++ গ্রহণযোগ্য" লেখা উচিত।
গ্রজেগোর্জ ওয়েয়ারজোইকিকি

: যে সি এপিআই প্রশ্নে প্রসঙ্গ-বহির্ভূত হয় মনে রাখবেন @MichaelMrozek 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

স্ট্যান্ডার্ড কমান্ড dfনির্দিষ্ট ফাইল (গুলি) অবস্থিত কোন ফাইল সিস্টেমের উপরে প্রদর্শিত হবে।

if df -P -- "$1" "$2" | awk 'NR==2 {dev1=$1} NR==3 {exit($1!=dev1)}'; then
  echo "$1 and $2 are on the same filesystem"
else
  echo "$1 and $2 are on different filesystems"
fi

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 বা আরও নতুন প্রয়োজন। ( প্রতিশ্রুতিবদ্ধ করুন যে বৈশিষ্ট্যটি যুক্ত করেছে) (বৈশিষ্ট্যটি প্রকাশিত নোটগুলি প্রকাশ করুন)
কিথ রাসেল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.