如何获得OSX上USB设备的安装路径?


58

我有一个备份脚本,可以将一些数据备份到USB设备。我的问题是OSX有时会更改预期的安装路径。例如,如果某个文件被锁定在预期的安装路径下,则OSX会将其安装在另一个路径上。可以将一个名为“ BACKUP”的USB设备安装在/ Volumes / BACKUP-1而不是/ Volumes / BACKUP。

有没有办法找出OSX终端中USB设备的当前安装路径?类似于“ mount_path BACKUP”(命令为伪造)之类的东西,如果未安装设备,则将返回“ / Volumes / BACKUP-1”或什么都不返回?

Answers:


68

以下命令显示有关已安装卷的信息:

  • 众所周知的Unix mount,显示例如/dev/disk5s3安装在/Volumes/Foo
  • diskutil list 显示所有磁盘和卷的概述
  • diskutil info /dev/disk5s3显示有关该卷的信息,包括Volume UUID可用于唯一标识该卷的信息。

您可以diskutil info使用卷的UUID 进行查询:

$ diskutil info DEC8759E-F77D-3EAE-B3EB-B6438F1AA428 | grep 'Mount Point'
   Mount Point:              /Volumes/DroboOne

我的系统上的示例命令输出:

$ mount
/dev/disk1 on / (hfs, local, journaled)
devfs on /dev (devfs, local, nobrowse)
map -hosts on /net (autofs, nosuid, automounted, nobrowse)
map auto_home on /home (autofs, automounted, nobrowse)
localhost:/bNqIvVr1ZdFBdf19Io81Q4 on /Volumes/MobileBackups (mtmfs, nosuid, read-only, nobrowse)
/dev/disk4 on /Volumes/MyBook (hfs, local, nodev, nosuid, journaled)
/dev/disk5s3 on /Volumes/DroboOne (hfs, local, nodev, nosuid, journaled, noowners)
/dev/disk7s3 on /Volumes/DroboTwo (hfs, local, nodev, nosuid, journaled, noowners)
/dev/disk6s3 on /Volumes/DroboThree (hfs, local, nodev, nosuid, journaled, noowners)

$ diskutil list
/dev/disk0
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                        *256.1 GB   disk0
   1:                        EFI                         209.7 MB   disk0s1
   2:          Apple_CoreStorage                         240.0 GB   disk0s2
   3:                 Apple_Boot Recovery HD             650.0 MB   disk0s3
/dev/disk1
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:                  Apple_HFS Servus10 HD            *239.7 GB   disk1
/dev/disk2
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                        *3.0 TB     disk2
   1:                        EFI                         209.7 MB   disk2s1
   2:          Apple_CoreStorage                         3.0 TB     disk2s2
   3:                 Apple_Boot Boot OS X               134.2 MB   disk2s3
/dev/disk4
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:                  Apple_HFS MyBook                 *3.0 TB     disk4
/dev/disk5
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:     Apple_partition_scheme                        *2.2 TB     disk5
   1:        Apple_partition_map                         32.3 KB    disk5s1
   2:                  Apple_HFS DroboOne                2.2 TB     disk5s3
/dev/disk6
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:     Apple_partition_scheme                        *2.2 TB     disk6
   1:        Apple_partition_map                         32.3 KB    disk6s1
   2:                  Apple_HFS DroboThree              2.2 TB     disk6s3
/dev/disk7
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:     Apple_partition_scheme                        *2.2 TB     disk7
   1:        Apple_partition_map                         32.3 KB    disk7s1
   2:                  Apple_HFS DroboTwo                2.2 TB     disk7s3

$ diskutil info /dev/disk5s3
   Device Identifier:        disk5s3
   Device Node:              /dev/disk5s3
   Part of Whole:            disk5
   Device / Media Name:      Untitled

   Volume Name:              DroboOne
   Escaped with Unicode:     DroboOne

   Mounted:                  Yes
   Mount Point:              /Volumes/DroboOne
   Escaped with Unicode:     /Volumes/DroboOne

   File System Personality:  Journaled HFS+
   Type (Bundle):            hfs
   Name (User Visible):      Mac OS Extended (Journaled)
   Journal:                  Journal size 172032 KB at offset 0x4001000
   Owners:                   Disabled

   Partition Type:           Apple_HFS
   OS Can Be Installed:      No
   Media Type:               Generic
   Protocol:                 FireWire
   SMART Status:             Not Supported
   Volume UUID:              DEC8759E-F77D-3EAE-B3EB-B6438F1AA428

   Total Size:               2.2 TB (2198888927232 Bytes) (exactly 4294704936 512-Byte-Blocks)
   Volume Free Space:        169.4 GB (169412173824 Bytes) (exactly 330883152 512-Byte-Blocks)
   Device Block Size:        512 Bytes

   Read-Only Media:          No
   Read-Only Volume:         No
   Ejectable:                Yes

   Whole:                    No
   Internal:                 No

我希望避免使用这些命令并通过此方法进行解析:)但是,如果没有其他方法,您是否知道有任何bash函数可以为您执行此操作?
xastor 2012年

@xastor添加了相关信息。man diskutil会有所帮助的。
丹尼尔·贝克

谢谢,我现在写了一个脚本,它可以工作了。我希望还有另一种方式,我应该在问题中提到这一点。例如,在另一种语言的OSX系统上会发生什么?我想不能在法国系统上
grep'Mount

@xastor diskutil未本地化。
丹尼尔·贝克

1
那么,这是一个可靠的解决方案。谢谢!
xastor 2012年

10

这个命令呢:

df -lH | grep "Filesystem"; df -lH | grep "/Volumes/*"

在“安装在”列中,可以获取安装在"/Volumes"其上的所有设备的所有安装点,在我看来,这些设备几乎都是USB设备;-)

这些grep命令基本上跳过安装在硬盘上的硬盘"/"

在OSX Snow Leopard的终端中,我使用它来快速查看当前连接的USB设备的安装点。如果您只对挂载点感兴趣,而不对UUID等所有其他参数感兴趣,那么我认为这将是更直接的方法,而不是"diskutil"其所有信息。


2

我在一个变量中检索它:

media=\`df | grep "media" | awk '{print $6}'\`

要么

media=$(df | awk '/media/ {print $6}')

df命令列出了分区,结果输出通过管道传递到grep命令的输入,该命令过滤并仅保留包含单词media的行,然后将管道通过管道传递给awk仅保留其一行输入的第六列的命令。


第二种形式应该是更可取的,但是如何传递/media/参数化的正则表达式并不清楚。尝试media=$(df | awk -v regex="$regex" '$1 ~ regex { print $6 }')将shell变量$regex作为要搜索的内容传递。
tripleee

1

只是好老diskutil。这不是Linux,您可以在其中查看/ sys或其他内容。

diskutil info "$VolumeName" | grep "Mount Point" | tr " " "\n" | tail -1

0

我只会为此使用fstab。在超级用户:Mac Lion上,有一个与此主题相关的主题:fstab已弃用。那么什么替代它以防止安装分区?


1
如何你会使用fstab这个,到底是什么?
丹尼尔·贝克

取出USB驱动器的UUId,创建安装点,并将其全部分配给/ etc / fstab。无论何时连接上述USB驱动器,都将被安装在该安装点上,并由其UUID识别。
dag729

请注意,用户的问题来自已在使用的默认安装点。
丹尼尔·贝克

这就是我的意思:通过使用/ etc / fstab为操作系统提供挂载点。从那时起,系统将读取/ etc / fstab,发现有一个带有关联挂载点的UUID,它将使用该UUID代替默认的挂载点。
dag729'5

0

我最终使用了这个bash脚本:

#!/bin/sh
#
# Retrieves the mount point of an OSX volume name or UUID.
# @param $1 Name of the volume or UUID of the volume.
# @return returns the mount path or an empty string if the volume is not mounted. 
#
diskutil info $1 | grep 'Mount Point' | cut -d : -f 2 | sed 's/^ *//g' | sed 's/ *$//g';

这是去年9月,还没有人对此发表评论吗?如果您希望此脚本执行注释所说明的操作,则您的“挂载点”应改为“设备节点”。

1
@Blakat设备节点不是OP所要求的。安装点是/Volumes/…,这是每个人都在谈论的内容,如果我正确阅读此问题。
slhck

如果您正在使用sed反正grepcut无用的 ; diskutil info "$1" | sed -n '/^ *Mount Point: */!d;s///;s/ *$//p'
tripleee

0

这就是我在OS X上的Shell脚本中使用的

df | awk '{print $6}' | grep -Ex "/Volumes/myvolume"

您能否添加一些句子来解释其工作原理?谢谢。
fixer1234

这是一种round回的表达方式,df | awk '$6 == "/Volumes/myvolume" { print $6 }'即,如果它恰好是预期的,则打印卷路径。该grep -E标志在这里是多余的,并且grep没有用,因为Awk已经非常了解如何匹配正则表达式。
三胞胎

更有用的命令可能会用grep的卷之前只打印了第六场,甚至更好的改变首先$6$1在我以前的评论。
tripleee

-1

这可能会更好:

df -lH | grep -E "*putinyourvolumelabel*$" | awk '{print $1}''

6
为什么这样会更好?
bertieb

丹尼斯,欢迎来到超级用户。另外两个答案不是很好的例子,但是答案的目的是教育而不是仅仅提供剪切和粘贴代码。我不是编码人员,所以我无法说明您的解决方案有多好,但是我怀疑bertieb的评论,甚至是低俗的说法,都是因为这只是无法解释的代码,而不是解决方案的质量。您能否添加几句话来说明其作用,以及使它成为比您所比较的更好的解决方案的原因?谢谢。
fixer1234
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.