web-dev-qa-db-ja.com

ファイルシステムのフォーマットを確認する方法

Bashスクリプトで、ディレクトリがどのファイルシステムタイプであるかを確認したいと思います。

アイデアは次のようなものです

if [path] is on a [filesystem] filesystem then
   filesystem specific command
end if
11
Dremor

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

デバイスの列にスペースが含まれる可能性があることに注意してください(ただし、まれです)。その場合、解析は失敗します。

11
marinus

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

12
rici