想要创建一个脚本(名为getmpoint
),它将从任何文件名返回挂载点。
第一个想法,比如:从df
解析输出或解析fstab
并不像看起来那么容易,因为例如:
getmpoint ../../../some/path/tmp/somefile
getmpoint /tmp/somesymlink #and want get the mountpoint where the real file is
getmpoint /
我有一些想法,使用stat
(获取设备) - 但我迷路了。需要一些指示如何解决这个问题。
另一个问题是Freebsd-stat和Linux-stat上的stat
命令不同。这里有便携式的方式吗?
同样,如何:
getmpoint /some/real/path/up/to/here/but/nonexistent_file
很高兴只从路径获取一个挂载点 - 没有文件存在 - 所以没有stat
。
有什么建议吗? (我可能自己制作一个剧本 - 但需要一些指导如何做......)
答案 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