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
は詳細情報を提供します。