スクリプトで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 )

答え2

あなたの質問を完全に理解したかどうかはわかりません。したがって、これを「開始点」として使用します。近づけば必要なものが得られるように調整できると確信しています。

$ lsblk --fs | grep / | awk '{print $1, $2}'  

答え3

df .そしてmount

まず、マウントポイントを手に入れましょう。

 cd /a/dir
 mp=$(df . | awk 'NR==2 { print $1}')
  • $mpデバイス名を押しながら長押し/a/dir

今マウントポイント

mount | awk -v mp=$mp '$1 == mp { print $5}'

これはインストールの種類を返す必要があります(xfs、、、etx3...の場合があります)。

編集する:

  • 私の答えがリンクの1つに含まれていることを確認しました。単にマウントするよりも、mountから返された行をナビゲートしたいかもしれません。$5

関連情報