Làm cách nào tôi có thể nhận được đường dẫn gắn kết của thiết bị USB trên OSX?


58

Tôi có một tập lệnh sao lưu sao lưu một số dữ liệu vào thiết bị USB. Vấn đề tôi gặp phải là OSX đôi khi thay đổi đường dẫn gắn kết dự kiến. Ví dụ: nếu một số tệp bị khóa theo đường dẫn gắn kết dự kiến, OSX sẽ gắn nó vào đường dẫn khác. Một thiết bị USB có tên 'BACKUP' có thể được gắn tại / Tập / BACKUP-1 thay vì / Tập / BACKUP.

Có cách nào để tìm ra đường dẫn gắn kết hiện tại của thiết bị USB trong OSX Terminal không? Một cái gì đó như 'mount_path BACKUP' (lệnh là giả mạo) sau đó sẽ trả về '/ Tập / BACKUP-1' hoặc không có gì nếu thiết bị không được gắn kết?

Câu trả lời:


68

Các lệnh sau cho bạn thấy thông tin về khối lượng được gắn kết:

  • Unix nổi tiếng mount, hiển thị ví dụ: /dev/disk5s3gắn tại/Volumes/Foo
  • diskutil list hiển thị tổng quan về tất cả các đĩa và ổ đĩa
  • diskutil info /dev/disk5s3hiển thị thông tin về âm lượng đó, bao gồm cả Volume UUIDcó thể được sử dụng để xác định duy nhất âm lượng đó.

Bạn có thể truy vấn diskutil infobằng cách sử dụng UUID của âm lượng:

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

Đầu ra lệnh mẫu trên hệ thống của tôi:

$ 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

Tôi đã hy vọng tránh phải sử dụng các lệnh đó và phân tích cú pháp theo cách này :) Nhưng nếu không có cách nào khác, bạn có biết bất kỳ hàm bash nào làm điều này cho bạn không?
xastor

@xastor Đã thêm thông tin liên quan. man diskutilsẽ có ích
Daniel Beck

Cảm ơn, tôi đã viết một kịch bản bây giờ và nó hoạt động. Tôi đã hy vọng có một cách khác mặc dù, tôi nên đã đề cập đến điều đó trong câu hỏi. Ví dụ, điều gì xảy ra trên một hệ thống OSX với ngôn ngữ khác? Tôi không thể grep 'Mount Volume' trên một hệ thống tiếng Pháp Tôi cho rằng ..
xastor

@xastor diskutilkhông được bản địa hóa.
Daniel Beck

1
Đây là một giải pháp đáng tin cậy sau đó. Cảm ơn bạn!
xastor

10

Điều gì về lệnh này:

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

Trong cột "Được gắn trên", bạn nhận được tất cả Điểm gắn kết của tất cả các thiết bị được gắn trên "/Volumes"đó, trong trường hợp của tôi hầu như luôn là các thiết bị USB ;-)

Các greplệnh về cơ bản bỏ qua ổ đĩa cứng được gắn trên "/".

Trong thiết bị đầu cuối của OSX Snow Leopard, tôi sử dụng nó để xem tổng quan nhanh về Điểm gắn kết của các thiết bị USB hiện đang kết nối. Nếu bạn chỉ quan tâm đến Mount Points và không phải tất cả các tham số khác như UUID, v.v., thì theo ý kiến ​​của tôi, cách này thẳng hơn là "diskutil"với tất cả thông tin của nó.


2

Tôi lấy nó trong một biến:

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

hoặc là

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

Các dfdanh sách lệnh các phân vùng, kết quả đầu ra được cấp nước tập trung làm đầu vào cho lệnh grep để lọc và giữ chỉ các dòng có chứa các phương tiện truyền thông từ, sau đó được cấp nước tập trung vào awklệnh mà chỉ giữ cột thứ 6 của đầu vào một dòng của nó.


Hình thức thứ hai nên được ưu tiên hơn nhiều, nhưng không rõ ràng làm thế nào để vượt qua trong biểu thức chính quy /media/. Cố gắng media=$(df | awk -v regex="$regex" '$1 ~ regex { print $6 }')vượt qua trong biến shell $regexlà điều cần tìm kiếm.
tripleee

1

Chỉ là người tốt diskutil. Đây không phải là Linux, nơi bạn có thể nhìn vào / sys hoặc thứ gì đó.

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

0

Tôi sẽ chỉ sử dụng fstab cho việc này. Có một chủ đề liên quan đến chủ đề này ở đây trên Super User: Mac Lion: fstab không được dùng nữa. Vì vậy, những gì thay thế nó để ngăn chặn một phân vùng gắn kết?


1
làm thế nào bạn sẽ sử dụng fstabcho điều này, chính xác?
Daniel Beck

Lấy UUId của ổ USB, tạo điểm gắn kết và đưa tất cả vào / etc / fstab. Bất cứ khi nào ổ USB nói trên được gắn vào, sẽ được gắn vào điểm gắn kết đó, được UUID của nó nhận ra.
dag729

Lưu ý rằng vấn đề của người dùng xuất phát từ điểm gắn kết mặc định đã được sử dụng.
Daniel Beck

Đó là điều tôi muốn nói: cung cấp cho HĐH một điểm gắn kết bằng cách sử dụng / etc / fstab. Từ lúc đó, hệ thống sẽ đọc / etc / fstab, thấy rằng có một UUID có điểm gắn kết liên quan và nó sẽ sử dụng nó thay vì mặc định.
dag729

0

Tôi đã kết thúc bằng cách sử dụng tập lệnh bash này:

#!/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';

Đây là tháng 9 năm ngoái, và chưa có ai bình luận về nó? Thay vào đó, 'Mount Point' của bạn NÊN là 'Nút thiết bị' nếu bạn mong muốn tập lệnh này thực hiện những gì các bình luận nói.

1
@Blakat Nút thiết bị không phải là thứ mà OP yêu cầu. Điểm gắn kết là /Volumes/…, đó là những gì mọi người đang nói về nếu tôi đọc chính xác câu hỏi này.
slhck

Nếu bạn đang sử dụng sedanyway, grepcutvô dụng ; diskutil info "$1" | sed -n '/^ *Mount Point: */!d;s///;s/ *$//p'
tripleee

0

Đây là những gì tôi sử dụng trong tập lệnh shell của mình trên OS X

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

Bạn có thể thêm một vài câu để giải thích làm thế nào điều này hoạt động? Cảm ơn.
fixer1234

Đây là một cách nói vòng vo, df | awk '$6 == "/Volumes/myvolume" { print $6 }'tức là in đường dẫn âm lượng nếu nó chính xác là đường dẫn dự kiến. Các grep -Elá cờ là không cần thiết ở đây và greplà vô ích vì AWK đã biết khá tốt như thế nào để phù hợp với một biểu thức chính quy.
tripleee

Một lệnh hữu ích hơn có lẽ sẽ grep cho khối lượng trước khi in chỉ lĩnh vực thứ sáu, hoặc thậm chí thay đổi tốt hơn là người đầu tiên $6để $1trong bình luận trước đây của tôi.
tripleee

-1

Điều này có thể hoạt động tốt hơn:

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

6
Tại sao điều đó có thể làm việc tốt hơn?
bertieb

Dennis, chào mừng đến với Siêu người dùng. Một vài câu trả lời khác không phải là ví dụ hay, nhưng mục tiêu của câu trả lời là giáo dục thay vì chỉ cung cấp mã cắt và dán. Tôi không phải là một lập trình viên, vì vậy tôi không thể giải quyết được giải pháp của bạn tốt như thế nào, nhưng tôi nghi ngờ nhận xét của bertieb, và có lẽ là downvote, đi đến thực tế rằng đây chỉ là mã không giải thích được, thay vì chất lượng của giải pháp. Bạn có thể thêm một vài câu để giải thích điều này không, và điều gì làm cho nó trở thành một giải pháp tốt hơn bất cứ điều gì bạn đang so sánh nó với? Cảm ơn.
fixer1234
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.