给出路径的挂载点

Cha*_*art 13 linux bash shell mount path

以下非常不健壮的shell代码将给出挂载点$path:

 (for i in $(df|cut -c 63-99); do case $path in $i*) echo $i;; esac; done) | tail -n 1

在shell中有更好的方法吗?

后记

这个脚本非常糟糕,但具有可在我的系统上运行的兑换质量.请注意,几个挂载点可能是前缀$path.

示例 在Linux系统上:

cas@txtproof:~$ path=/sys/block/hda1
cas@txtproof:~$ for i in $(df -a|cut -c 57-99); do case $path in $i*) echo $i;; esac; done| tail -1
/sys

在Mac OSX系统上

cas local$ path=/dev/fd/0
cas local$ for i in $(df -a|cut -c 63-99); do case $path in $i*) echo $i;; esac; done| tail -1
/dev

注意需要改变切割参数,因为df的输出方式不同; 使用awk解决了这个问题,但即使是awk也是不可移植的,给定了结果格式化df返回的各种实现.

回答 看起来像是表格输出是shell中唯一的方法,但是

df -P "$path"  | tail -1 | awk '{ print $NF}'

基于ghostdog74的答案,对我所拥有的是一个很大的改进.注意两个新问题:首先,df $path坚持$path命名现有文件,我上面的脚本并不关心; 其次,不用担心解除引用符号链接.如果您的挂载点中包含空格,则不起作用,如果其中包含可移动介质,其卷名称中包含空格,则会出现这种情况.

编写Python代码来正确完成工作并不困难.

Jes*_*erE 17

df 将路径作为参数,所以这样的东西应该相当健壮;

df "$path" | tail -1 | awk '{ print $6 }'
Run Code Online (Sandbox Code Playgroud)


Dou*_*der 14

理论上stat会告诉你文件所在的设备,并且应该有一些方法将设备映射到安装点.

例如,在linux上,这应该工作:

stat -c '%m' $path
Run Code Online (Sandbox Code Playgroud)

  • 伟大的!如果设备安装在带有空格的路径上,而接受的答案失败,则此方法有效。 (2认同)

Gra*_*eme 6

一直是使用程序格式化选项的粉丝,因为它比操作输出更强大(例如,如果挂载点有空格).GNU df允许以下内容:

df --output=target "$path" | tail -1
Run Code Online (Sandbox Code Playgroud)

不幸的是,我无法看到阻止打印标题的选项,因此仍需要尾部.

  • 使用`--output = source`来获取安装路径的块设备. (2认同)