파일 시스템의 형식을 확인하는 방법 디렉토리가 어떤 파일 시스템 유형인지 확인하고

bash 스크립트에서 디렉토리가 어떤 파일 시스템 유형인지 확인하고 싶습니다.

아이디어는

if [path] is on a [filesystem] filesystem then
   filesystem specific command
end if


답변

사용하십시오 df. 경로를 전달하면 해당 경로에 대한 파일 시스템 정보가 제공됩니다. 파일 시스템 유형이 필요한 경우 다음 -T과 같이 스위치를 사용하십시오 .

$ df -T test
Filesystem     Type 1K-blocks     Used Available Use% Mounted on
/dev/sda2      ext4 182634676 32337180 141020160  19% /home

파일 시스템 유형을 추출하려면 파일 시스템 유형을 구문 분석 할 수 있습니다 ( 장치 부분이 너무 길 경우 줄 바꿈 -P을 피하기 위해 스위치를 사용하십시오 df).

$ df -PT test | awk 'NR==2 {print $2}'
ext4

따라서 다음 if과 같은 구문 에서 해당 값을 사용할 수 있습니다 .

if [ "$(df -PT "$path" | awk 'NR==2 {print $2}')" = "ext4" ] ; then
  it is an ext4 filesystem
fi

장치 열에 공백이 포함될 수 있지만 드물기는하지만 구문 분석이 실패합니다.


답변

GNU stat 명령이 설치된 시스템에서 (표준 Linux 배포판과 마찬가지로) stat명령을 사용하여 구문 분석하지 않고도 주어진 파일에 대한 fs 유형을 얻을 수 있습니다 .

stat -f -c %T filename

-fstat파일 대신 파일 시스템에 대한 정보를 제공하도록 지시 -c %T하고 사람이 읽을 수있는 파일 시스템 유형 ( %T) 만 포함하도록 출력 형식을 설정합니다 .

따라서 (bash에서) 다음과 같이 사용할 수 있습니다.

if [[ $(stat -f -c %T filename) == ext4 ]]; then
  # ext4 specific command
fi

man stat 더 많은 정보를 제공 할 것입니다.


답변

findmnt(의 일부 util-linux) :

findmnt -no fstype -T /path/to/file

옵션을 사용하는 경우

-T,-목표 경로

경로가 마운트 포인트 파일 또는 디렉토리가 아닌 경우, 마운트 포인트 findmnt를 얻기 위해 경로 요소를 역순으로 점검하십시오. 다른 두 옵션은 헤더 행을 억제하고 -n, --noheading나열 할 열을 선택합니다.-o, --output


dffrom coreutils은 다음과 --output=같은 특정 필드 만 인쇄 하는 비슷한 옵션 을 가지고 있습니다 fstype.

df --output=fstype /path/to/file

헤더를 제거 할 수있는 옵션이 없으므로 출력을 파이프로 파이프해야합니다. | sed 1d