stat
系统调用(man 2 stat
)返回包含该文件的设备的ID。
在脚本中,可以使用如下方式获得此ID
perl -e 'warn((stat "/tmp")[0])'
给出ID,如何获取磁盘名称,例如/dev/sda2
或/dev/disk1s1
?
我想最好以可移植的方式在脚本(bash,perl等)中进行操作,以使其在MacOS和Linux上都能可靠地工作。
您可以使用'df'枚举文件系统,并在设备ID和磁盘之间创建映射。回想一下,每条df行将在第一列中列出安装点(/ dev / sda1,...),在第五列中列出安装点。
以下脚本将bash关联数组用于地图,并使用stat -c'%d'提取给定路径的'dev'值。
# Create map dev2fs
function file2dev {
stat -c '%d' "$1"
# If needed, use Perl equivalent
# perl -e 'print ((stat($ARGV[0]))[0])' "$1"
}
declare -A dev2fs
while read fs size used available use mount ; do
id=$(file2dev $mount);
[ "$id" ] && dev2fs[$id]=$fs
done <<< "$(df)"
# Map a file to device
dev=$(file2dev /path/to/file );
echo "Device=${dev2fs[$dev]}"
此外,也可以使用'mount -l'遍历已挂载的文件系统。我不确定MacOS上存在哪一个。