두 개의 디렉토리 또는 파일이 동일한 파일 시스템에 속하는지 확인하는 방법


15

두 개의 디렉토리가 동일한 파일 시스템에 속하는지 확인하는 가장 좋은 방법은 무엇입니까?

허용되는 답변 : bash, python, C / C ++.


파이썬 / C ++ 답변을 원한다면 잘못된 사이트에 있습니다
Michael Mrozek

좋은 점- "python, C / C ++는 허용됩니다"라고 작성해야합니다.
Grzegorz Wierzowiecki

: API의 질문에 주제되는 C 기억 @MichaelMrozek meta.unix.stackexchange.com/questions/314/...
그르 Wierzowiecki

답변:



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

방금 Qt / C ++ 기반 프로젝트에서 동일한 질문을 보았고이 간단하고 휴대용 솔루션을 찾았습니다.

#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;
}

매우 특정한 라이브러리, 무겁고 표준이 아닙니다.
Sandburg

1

"stat"답변은 가장 좋지만 두 파일 시스템이 동일한 장치에 있으면 오 탐지를 얻습니다. 여기까지 내가 찾은 최고의 Linux 쉘 방법이 있습니다 (이 예제는 Bash 용입니다).

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

(coreutils 8.21 이상 필요)


이를 위해서는 Coreutils 8.21 이상이 필요합니다. ( 기능을 추가 한 커밋 ) (기능 을보고하는 릴리스 정보 )
Keith Russell
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.