Tôi muốn kiểm tra, trong một tập lệnh bash, trên hệ thống tập tin loại thư mục là gì.
Ý tưởng là một cái gì đó như
if [path] is on a [filesystem] filesystem then
filesystem specific command
end if
Tôi muốn kiểm tra, trong một tập lệnh bash, trên hệ thống tập tin loại thư mục là gì.
Ý tưởng là một cái gì đó như
if [path] is on a [filesystem] filesystem then
filesystem specific command
end if
Câu trả lời:
Sử dụng df
. Bạn có thể truyền cho nó một đường dẫn và nó sẽ cung cấp cho bạn thông tin hệ thống tập tin cho đường dẫn đó. Nếu bạn cần loại hệ thống tập tin, hãy sử dụng công -T
tắc, như vậy:
$ df -T test
Filesystem Type 1K-blocks Used Available Use% Mounted on
/dev/sda2 ext4 182634676 32337180 141020160 19% /home
Để trích xuất loại hệ thống tập tin, bạn có thể phân tích cú pháp (sử dụng công -P
tắc để tránh df
ngắt dòng nếu phần thiết bị quá dài):
$ df -PT test | awk 'NR==2 {print $2}'
ext4
Vì vậy, bạn có thể sử dụng giá trị đó trong một if
cấu trúc như vậy:
if [ "$(df -PT "$path" | awk 'NR==2 {print $2}')" = "ext4" ] ; then
it is an ext4 filesystem
fi
Coi chừng cột thiết bị có thể chứa dấu cách (nhưng hiếm khi xảy ra), trong trường hợp đó việc phân tích cú pháp sẽ thất bại.
Trên một hệ thống có lệnh GNU stat được cài đặt (như với bất kỳ bản phân phối Linux tiêu chuẩn nào), bạn có thể lấy loại fs cho một tệp đã cho mà không yêu cầu bất kỳ phân tích cú pháp nào bằng cách sử dụng stat
lệnh:
stat -f -c %T filename
-f
yêu stat
cầu cung cấp thông tin về hệ thống tệp thay vì tệp và -c %T
đặt định dạng đầu ra chỉ bao gồm loại hệ thống tệp có thể đọc được của con người ( %T
).
Vì vậy, bạn có thể sử dụng (trong bash) như:
if [[ $(stat -f -c %T filename) == ext4 ]]; then
# ext4 specific command
fi
man stat
sẽ cung cấp thêm thông tin.
Với findmnt
(một phần của util-linux
):
findmnt -no fstype -T /path/to/file
Khi sử dụng tùy chọn
-T, - đường dẫn nhắm mục tiêunếu đường dẫn không phải là tệp hoặc thư mục mountpoint, hãy
findmnt
kiểm tra các phần tử đường dẫn theo thứ tự ngược lại để lấy mountpoint. Hai tùy chọn khác triệt tiêu dòng tiêu đề: -n, --noheading
và chọn (các) cột sẽ được liệt kê:-o, --output
df
từ coreutils
có một tùy chọn tương tự --output=
để chỉ in một số trường nhất định, fstype
ví dụ:
df --output=fstype /path/to/file
không có tùy chọn để loại bỏ tiêu đề, vì vậy bạn sẽ phải chuyển đầu ra sang, vd | sed 1d
findmnt
công cụ dễ thương , ngay cả với đầu ra TUI vẽ đường. Cảm ơn!