Saya ingin memeriksa, dalam skrip bash, pada tipe filesystem apa sebuah direktori.
Idenya adalah sesuatu seperti
if [path] is on a [filesystem] filesystem then
filesystem specific command
end if
Saya ingin memeriksa, dalam skrip bash, pada tipe filesystem apa sebuah direktori.
Idenya adalah sesuatu seperti
if [path] is on a [filesystem] filesystem then
filesystem specific command
end if
Jawaban:
Gunakan df
. Anda dapat melewatinya lintasan, dan itu akan memberi Anda informasi sistem file untuk lintasan itu. Jika Anda memerlukan tipe sistem file, gunakan -T
switch, seperti:
$ df -T test
Filesystem Type 1K-blocks Used Available Use% Mounted on
/dev/sda2 ext4 182634676 32337180 141020160 19% /home
Untuk mengekstrak jenis sistem file, Anda dapat menguraikannya (gunakan -P
sakelar untuk menghindari df
terputusnya jalur jika bagian perangkat terlalu panjang):
$ df -PT test | awk 'NR==2 {print $2}'
ext4
Jadi Anda bisa menggunakan nilai itu dalam if
konstruk seperti:
if [ "$(df -PT "$path" | awk 'NR==2 {print $2}')" = "ext4" ] ; then
it is an ext4 filesystem
fi
Berhati-hatilah karena kolom perangkat dapat berisi spasi (tetapi jarang), dalam hal ini penguraian akan gagal.
Pada sistem dengan perintah stat GNU terinstal (seperti halnya dengan semua distro Linux standar), Anda bisa mendapatkan jenis fs untuk file yang diberikan tanpa memerlukan penguraian menggunakan stat
perintah:
stat -f -c %T filename
-f
memberitahu stat
untuk memberikan informasi tentang sistem file dan bukan file, dan -c %T
mengatur format output untuk menyertakan hanya tipe sistem file yang dapat dibaca manusia ( %T
).
Jadi Anda bisa menggunakannya (dalam bash) sebagai:
if [[ $(stat -f -c %T filename) == ext4 ]]; then
# ext4 specific command
fi
man stat
akan memberikan informasi lebih lanjut.
Dengan findmnt
(bagian dari util-linux
):
findmnt -no fstype -T /path/to/file
Saat menggunakan opsi
-T, jalur --targetjika path bukan file atau direktori mountpoint,
findmnt
periksa elemen path dalam urutan terbalik untuk mendapatkan mountpoint. Dua opsi lainnya menekan baris header: -n, --noheading
dan pilih kolom yang akan dicantumkan:-o, --output
df
dari coreutils
memiliki opsi serupa --output=
untuk hanya mencetak bidang tertentu, seperti fstype
misalnya:
df --output=fstype /path/to/file
tidak ada opsi untuk menghapus header, jadi Anda harus mem-pipe output ke mis | sed 1d
findmnt
Alat yang lucu , bahkan dengan output TUI garis-gambar. Terima kasih!