Bashスクリプトでディレクトリのファイルシステムタイプを確認したいと思います。
アイデアはこんな感じ
if [path] is on a [filesystem] filesystem then
filesystem specific command
end if
答え1
標準のLinuxディストリビューションと同様に、GNU statコマンドがインストールされているシステムでは、構文解析なしで特定のファイルのfsタイプを取得できますstat
。
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
より多くの情報が提供されます。
答え2
使用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
デバイス列にはスペースを含めることができますが(まれに)、この場合、解析は失敗します。
答え3
findmnt
(の一部)とutil-linux
:
findmnt -no fstype -T /path/to/file
このオプションを使用する場合
-T、-ターゲット道パスがマウントポイントファイルまたはディレクトリでない場合は、マウント
findmnt
ポイントを取得するためにパス要素を逆の順序で確認します。他の2つのオプションはヘッダー行を抑制し、一覧-n, --noheading
表示する列を選択します。-o, --output
df
fromには、特定のフィールドのみを印刷するcoreutils
同様のオプションがあります。たとえば、次のようになります。--output=
fstype
df --output=fstype /path/to/file
ただし、ヘッダーを削除するオプションがないため、出力をパイプに接続する必要があります。| sed 1d