次の非常に堅牢でないシェル コードは、マウント ポイントを指定し$path
ます。
(for i in $(df|cut -c 63-99); do case $path in $i*) echo $i;; esac; 完了) | テール -n 1
シェルでこれを行うより良い方法はありますか?
あとがき
このスクリプトは本当にひどいものですが、自分のシステムで動作するという利点があります。いくつかのマウント ポイントが のプレフィックスである場合があることに注意してください$path
。
例 Linux システムの場合:
cas@txtproof:~$ パス =/sys/block/hda1 cas@txtproof:~$ for i in $(df -a|cut -c 57-99); do case $path in $i*) echo $i;; esac; 完了| 尾 -1 /sys
Mac OSX システムの場合
cas local$ パス =/dev/fd/0 cas local$ for i in $(df -a|cut -c 63-99); do case $path in $i*) echo $i;; esac; 完了| 尾 -1 /dev
df の出力が異なるため、cut のパラメーターを変更する必要があることに注意してください。awk を使用するとこれは解決しますが、df return のさまざまな実装をフォーマットする結果の範囲を考えると、awk でさえ移植性がありません。
回答 シェル内で表形式の出力を変更することが唯一の方法のように見えますが、
df -P "$パス" | テール -1 | awk '{ print $NF}'
ghostdog74 の回答に基づいて、私が持っていたものを大幅に改善しました。2 つの新しい問題に注意してください。まず、既存のファイルに名前を付けるdf $path
ことを主張し$path
ます。上記のスクリプトは気にしません。第二に、シンボリックリンクの逆参照について心配する必要はありません。マウント ポイントにスペースが含まれている場合、これは機能しません。これは、ボリューム名にスペースが含まれるリムーバブル メディアがある場合に発生します。
ジョブを適切に実行する Python コードを作成することは難しくありません。