来自文件名的Mountpoint - 便携式方式

时间:2013-04-23 20:57:16

标签: bash shell filesystems mount mount-point

想要创建一个脚本(名为getmpoint),它将从任何文件名返回挂载点。

第一个想法,比如:从df解析输出或解析fstab并不像看起来那么容易,因为例如:

getmpoint ../../../some/path/tmp/somefile
getmpoint /tmp/somesymlink   #and want get the mountpoint where the real file is
getmpoint /

我有一些想法,使用stat(获取设备) - 但我迷路了。需要一些指示如何解决这个问题。

另一个问题是Freebsd-statLinux-stat上的stat命令不同。这里有便携式的方式吗?

同样,如何:

getmpoint /some/real/path/up/to/here/but/nonexistent_file

很高兴只从路径获取一个挂载点 - 没有文件存在 - 所以没有stat

有什么建议吗? (我可能自己制作一个剧本 - 但需要一些指导如何做......)

1 个答案:

答案 0 :(得分:2)

试试这个:

getmpoint.sh,希望文件名为param

#!/bin/bash

for path
do
    orig=$path

    #find the existing path component
    while [ ! -e "$path" ]
    do
        path=$(dirname "$path")
    done

    #get a real file from a symlink
    [ -L "$path" ] && path=$(readlink "$path")

    # use "portable" (df -P)  - to get all informatons
    # 512-blocks      Used Available Capacity  Mounted on
    read s512 used avail capa mounted <<< $(df -P "$path" | awk '{if(NR==2){ print $2, $3, $4, $5, $6}}')

    echo "Filename: $orig"
    echo "Mounted: $mounted"
    echo "Available blocks: $avail"
done