ファイルシステムのフォーマットをチェックする方法


11

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

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

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

マウントポイントまたはファイルシステムタイプが必要ですか?あなたの望ましい出力は何でしょうか?
terdon

回答:


11

を使用し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

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


12

GNU statコマンドがインストールされているシステムでは(標準のLinuxディストリビューションと同様に)、statコマンドを使用して解析することなく、特定のファイルのfsタイプを取得できます。

stat -f -c %T filename

-fstatファイルの代わりにファイルシステムに関する情報を提供するように指示し-c %T、人間が読めるファイルシステムタイプ(%T)のみを含むように出力フォーマットを設定します。

だからあなたはそれを(bashで)次のように使うことができます:

if [[ $(stat -f -c %T filename) == ext4 ]]; then
  # ext4 specific command
fi

man stat 詳細情報を提供します。


3

findmnt(の一部util-linux):

findmnt -no fstype -T /path/to/file

オプション使用時

-T、-ターゲットパス
パスがマウントポイントファイルまたはディレクトリでない場合はfindmnt、逆の順序でパス要素をチェックして、マウントポイントを取得します。他の2つのオプションは、ヘッダー行を抑制-n, --noheadingします。リストする列を選択します。-o, --output


dffromにcoreutils--output=、次のような特定のフィールドのみを印刷する同様のオプションがありますfstype

df --output=fstype /path/to/file

ただし、ヘッダーを削除するオプションはないため、出力をパイプして、たとえば | sed 1d


findmnt線画TUI出力でもかわいいツール。ありがとう!
Incnis Mrsi 2015
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.