다른 파일 시스템에 있는 디렉터리를 어떻게 식별합니까?

다른 파일 시스템에 있는 디렉터리를 어떻게 식별합니까?

내가 디렉토리(예: /mnt)에 있다고 상상해 보세요. 그 중 일부는 다른 파일 시스템의 마운트 지점이고 다른 디렉토리는 동일한 파일 시스템의 합법적인 디렉토리입니다. 두 디렉터리를 구별할 수 있도록 현재 디렉터리의 내용을 나열하는 간단한 명령을 실행할 수 있습니까?

한 가지 가능성은 tree -L 1 -x동일한 파일 시스템의 해당 폴더만 확장한다는 것입니다. 그러나 해당 폴더가 모두 비어 있는 경우(즉, 빈 파일 시스템이 마운트 지점에 마운트되고 합법적인 디렉터리가 빈 디렉터리인 경우) 작동하지 않습니다. .

(여기서 실제 사용 사례는 btrfs 파일 시스템으로, 어떤 디렉터리가 하위 볼륨이고 어떤 디렉터리가 아닌지 쉽게 식별할 수 있습니다.)

편집하다:친구로부터 이것을 사용하여 df각 파일의 마운트 지점을 가져오면 다음을 실행하여 다른 파일 시스템의 모든 폴더를 나열할 수 있다는 제안을 받았습니다.

comm -1 -3 \
  <(df --output=target . | sort) \
  <(df --output=target * | sort | uniq) |
  xargs basename -a

이 명령은 마운트 지점을 얻기 위해 모든 파일에 대해 실행되고, df현재 디렉터리에서 출력을 제거한 다음(헤더도 제거됨), 각 파일의 기본 이름을 검색합니다. df그러나 이는 특별히 우아하지도 않고 깨지기 쉽습니다(적어도 개행 때문에, 아마도 제가 뭔가를 간과하고 있기 때문일 수도 있습니다). 더 좋은 방법이 있나요?

답변1

나는 이것을 사용할 것이다 df.

$ cd /usr

$ ls
X11R6       include     libexec     mdec        sbin        xobj
bin         lib         local       obj         share       xsrc
games       libdata     lost+found  ports       src

$ for d in *; do test -d "$d" && df -P "$d" | awk -v d="$d" 'FNR>1{print d,$NF}'; done 
X11R6 /usr
bin /usr
games /usr
include /usr
lib /usr
libdata /usr
libexec /usr
local /usr/local
lost+found /usr
mdec /usr
obj /usr
ports /usr/ports
sbin /usr
share /usr
src /usr
xobj /usr
xsrc /usr

답변2

그리고통계자료(*가 매우 큰 것으로 확장되면 ARG_MAX가 오버플로될 수 있습니다):

stat -c '%D %n' */ | awk -v no=$(stat -c %D /) ' $1 != no { print $2 }'

그리고찾다:

find . -mindepth 1 -maxdepth 1 -type d -printf '%D\t%P\n'  |grep -v "^$(stat -c%d /)" |cut -f2

답변3

Linux에서는 다음을 사용할 수 있습니다.stat마운트된 각 파일 시스템과 연관된 고유 식별자를 나열합니다.

stat -f -c %i somefile

예를 들어, 현재 디렉터리의 마운트 지점을 나열하려면(파일 이름에 줄바꿈이 없다고 가정) 다음을 실행하면 됩니다.

stat -f -c '%i %n' * | grep -v "^$(stat -f -c %i .)"

zsh에서는 사용할 수 있습니다zsh/stat기준 치수. 로드한 zmodload zsh/stat다음

zstat +device *

현재 디렉터리의 마운트 지점을 나열합니다.

zstat +device * | grep -v " $(zstat +device .)"

또는

print -rl -- *(e\''[[ $(zstat +device $REPLY) == '$(zstat +device .)' ]]'\')

예를 들어, 동일한 네트워크 공유를 다른 위치에 마운트하거나 Linux 바인드 마운트를 사용하는 경우와 같이 동일한 파일 시스템의 다양한 보기에 대해 파일 시스템 식별자가 동일합니다. 그러나 btrfs 하위 볼륨에는 자체 식별자가 있습니다.출력 구문 분석df더 번거롭지만 이러한 제한은 없습니다.

관련 정보