Bash 스크립트에서 디렉토리의 파일 시스템 유형을 확인하고 싶습니다.
아이디어는 이렇습니다
if [path] is on a [filesystem] filesystem then
filesystem specific command
end if
답변1
표준 Linux 배포판과 마찬가지로 GNU stat 명령이 설치된 시스템에서는 다음을 사용하여 구문 분석 없이 주어진 파일의 fs 유형을 얻을 수 있습니다 stat
.
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
더 많은 정보가 제공될 것입니다.
답변2
사용 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
장치 열에는 공백이 포함될 수 있지만(드물게), 이 경우 구문 분석이 실패합니다.
답변3
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