ユーザーは、を使用してrsync
外部デバイスの(増分)バックアップスクリプトを持っています。彼が持っていたSSDのバグでした。彼のデバイスがフォーマットされていることがわかりましたexFAT
。これは私がこれを検出する必要があることを意味します。スクリプトから、オプションを変更する必要があるためですrsync
(例:exFATはシンボリックリンクを処理できず、所有者/グループ権限がないなど)。
ユーザーはLinux Mintを実行しています。私はUbuntuを実行します。私のUbuntuソリューションは彼のMintでも動作すると仮定/希望するだけです。
私は見たことがない:
- パーティションがext2、ext3、またはext4かどうかはどうすればわかりますか?
- どのタイプのファイルシステムを使用しているのか、どうすればわかりますか?
- https://www.tecmint.com/find-linux-filesystem-type/
良い提案がたくさんありますが、次のような私の要件を満たす提案はありません。
- (構文解析可能)
ntfs
/ は単にexfat
言ったのではなく、明示的に報告しなければなりません (これはfuseblk
& すべてに該当します。区別する必要があります)。exfat
ntfs
- 〜しなければならないいいえ必要Sudo。
/dev/...
実行可能ファイルは。
私が試した提案の中で:
fdisk -l
、、parted -l
:file -sL
必要Sudoおよび/または/dev/...
ブロックデバイスmount
:必須/dev/...
、報告のみfuseblk
df -T
、stat -f -c %T
:ディレクトリを許可しますが、報告するだけです。fuseblk
lsblk -f
、blkid
:/dev/...
ブロックデバイスが必要です
これらすべての基準を満たす単純なコマンドはありますか?またはlsblk
/が/をblkid
正しく報告しているようです。これを渡す必要がある場合は、スクリプトのディレクトリパスから適切にインポートするにはどうすればよいですか?exfat
ntfs
/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