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
-f
stat
파일 대신 파일 시스템에 대한 정보를 제공하도록 지시 -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
df
from coreutils
은 다음과 --output=
같은 특정 필드 만 인쇄 하는 비슷한 옵션 을 가지고 있습니다 fstype
.
df --output=fstype /path/to/file
헤더를 제거 할 수있는 옵션이 없으므로 출력을 파이프로 파이프해야합니다. | sed 1d