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 -Tswitch, 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 -Psakelar untuk menghindari dfterputusnya jalur jika bagian perangkat terlalu panjang):
$ df -PT test | awk 'NR==2 {print $2}'
ext4
Jadi Anda bisa menggunakan nilai itu dalam ifkonstruk 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 statperintah:
stat -f -c %T filename
-fmemberitahu statuntuk memberikan informasi tentang sistem file dan bukan file, dan -c %Tmengatur 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,
findmntperiksa elemen path dalam urutan terbalik untuk mendapatkan mountpoint. Dua opsi lainnya menekan baris header: -n, --noheadingdan pilih kolom yang akan dicantumkan:-o, --output
dfdari coreutilsmemiliki opsi serupa --output=untuk hanya mencetak bidang tertentu, seperti fstypemisalnya:
df --output=fstype /path/to/file
tidak ada opsi untuk menghapus header, jadi Anda harus mem-pipe output ke mis | sed 1d
findmntAlat yang lucu , bahkan dengan output TUI garis-gambar. Terima kasih!