スクリプトでNTFS / exFATファイルシステムの種類を検出する方法

スクリプトでNTFS / exFATファイルシステムの種類を検出する方法

ユーザーは、を使用してrsync外部デバイスの(増分)バックアップスクリプトを持っています。彼が持っていたSSDのバグでした。彼のデバイスがフォーマットされていることがわかりましたexFAT。これは私がこれを検出する必要があることを意味します。スクリプトから、オプションを変更する必要があるためですrsync(例:exFATはシンボリックリンクを処理できず、所有者/グループ権限がないなど)。

ユーザーはLinux Mintを実行しています。私はUbuntuを実行します。私のUbuntuソリューションは彼のMintでも動作すると仮定/希望するだけです。

私は見たことがない:

良い提案がたくさんありますが、次のような私の要件を満たす提案はありません。

  • (構文解析可能) ntfs/ は単にexfat言ったのではなく、明示的に報告しなければなりません (これはfuseblk& すべてに該当します。区別する必要があります)。exfatntfs
  • 〜しなければならないいいえ必要Sudo
  • /dev/...実行可能ファイルは。

私が試した提案の中で:

  • fdisk -l、、parted -lfile -sL必要Sudoおよび/または/dev/...ブロックデバイス
  • mount:必須/dev/...、報告のみfuseblk
  • df -Tstat -f -c %T:ディレクトリを許可しますが、報告するだけです。fuseblk
  • lsblk -fblkid/dev/...ブロックデバイスが必要です

これらすべての基準を満たす単純なコマンドはありますか?またはlsblk/が/をblkid正しく報告しているようです。これを渡す必要がある場合は、スクリプトのディレクトリパスから適切にインポートするにはどうすればよいですか?exfatntfs/dev

ベストアンサー1

他の投稿の回答/提案を送っていただきありがとうございます。ここに私の完全な解決策があります。

df -Pパスからデバイスをインポートするために使用でき、lsblk --fs正確なファイルシステムをインポートするために提供できます。したがって、1行は次のようになります。

fs=$( lsblk --fs --noheadings $( df -P $path | awk 'END{print $1}' ) | awk 'END{print $2}' )

あなたが知っておくべきファイルシステムが何であるかを知っていればfuseblk---それは私の目的に十分でntfs十分exfatであることがわかりました---これはより簡単な方法で決定できます:

fs=$( stat -f -c '%T' $path )

おすすめ記事