ฉันจะขอเส้นทางเชื่อมต่อของอุปกรณ์ USB บน OSX ได้อย่างไร


58

ฉันมีสคริปต์สำรองที่สำรองข้อมูลบางอย่างไปยังอุปกรณ์ USB ปัญหาที่ฉันมีคือบางครั้ง OSX เปลี่ยนเส้นทางการเมานต์ที่คาดไว้ ตัวอย่างเช่นหากไฟล์บางไฟล์ถูกล็อคภายใต้เส้นทางการเมานท์ที่คาดไว้ OSX จะเมานต์บนเส้นทางอื่น อุปกรณ์ USB ชื่อ 'BACKUP' สามารถติดตั้งที่ / Volumes / BACKUP-1 แทน / Volumes / BACKUP

มีวิธีในการค้นหาเส้นทางการเมานต์ปัจจุบันของอุปกรณ์ USB ใน Terminal OSX หรือไม่? มีบางอย่างเช่น 'mount_path BACKUP' (คำสั่งเป็นของปลอม) ซึ่งจะส่งคืน '/ Volumes / BACKUP-1' หรือไม่มีอะไรถ้าอุปกรณ์ไม่ได้ถูกเมานท์?

คำตอบ:


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

ฉันหวังว่าจะไม่ต้องใช้คำสั่งเหล่านั้นและแยกทางของฉันผ่านทางนี้ :) แต่ถ้าไม่มีวิธีอื่นคุณรู้หรือไม่ว่าฟังก์ชั่นทุบตีใดที่ทำเพื่อคุณ
xastor

@xastor เพิ่มข้อมูลที่เกี่ยวข้องแล้ว man diskutilจะช่วยได้
Daniel Beck

ขอบคุณฉันเขียนสคริปต์ตอนนี้และใช้งานได้ ฉันหวังว่าจะมีวิธีอื่นแม้ว่าฉันควรจะกล่าวถึงในคำถาม ตัวอย่างเช่นเกิดอะไรขึ้นกับระบบ OSX ที่มีภาษาอื่น? ฉันไม่สามารถ grep 'Mount Volume' ในระบบภาษาฝรั่งเศสได้ฉันว่า ..
xastor

@xastor diskutilไม่ได้แปลเป็นภาษาท้องถิ่น
Daniel Beck

1
นี่คือทางออกที่เชื่อถือได้แล้ว ขอขอบคุณ!
xastor

10

สิ่งที่เกี่ยวกับคำสั่งนี้:

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

ในคอลัมน์ "ติดตั้ง" คุณจะได้รับคะแนน Mount ทั้งหมดของอุปกรณ์ทั้งหมดที่ติดตั้ง"/Volumes"ซึ่งในกรณีของฉันมักจะเป็นอุปกรณ์ USB ;-)

คำสั่งพื้นข้ามฮาร์ดไดรฟ์ที่ติดตั้งอยู่บนgrep"/"

ในเทอร์มินัลของ OSX Snow Leopard ของฉันฉันใช้เพื่อดูภาพรวมอย่างรวดเร็วของ Mount Points ของอุปกรณ์ USB ที่เชื่อมต่ออยู่ในปัจจุบัน หากคุณสนใจเฉพาะ Mount Points เท่านั้นและไม่ใช่พารามิเตอร์อื่น ๆ ทั้งหมดเช่น UUID เป็นต้นฉันคิดว่านี่เป็นวิธีที่ตรงไปตรงมามากกว่าที่จะ"diskutil"เป็นข้อมูลทั้งหมด


2

ฉันดึงมันมาในตัวแปร:

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

หรือ

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

dfคำสั่งแสดงรายการพาร์ทิชัน, การส่งออกผลเป็นประปาเป็น input คำสั่ง grep ที่กรองและช่วยให้เพียงเส้นที่มีสื่อคำซึ่งเป็นประปาจากนั้นไปที่awkคำสั่งซึ่งเพียง แต่ช่วยให้คอลัมน์ที่ 6 ของการป้อนข้อมูลหนึ่งสาย


รูปแบบที่สองควรเป็นที่นิยมมาก แต่ก็ไม่ชัดเจนว่าจะผ่านใน/media/regex parametrized ได้อย่างไร ลอง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สำหรับการนี้ว่า?
Daniel Beck

การใช้ UUId ของไดรฟ์ USB สร้างจุดเชื่อมต่อและมอบให้กับ / etc / fstab เมื่อใดก็ตามที่มีการเชื่อมต่อไดรฟ์ USB ดังกล่าวจะถูกติดตั้งบนจุดเชื่อมต่อนั้นซึ่ง UUID เป็นที่รู้จัก
dag729

โปรดทราบว่าปัญหาของผู้ใช้มาจากจุดเมานต์เริ่มต้นที่กำลังใช้งานอยู่เนื่องจาก
Daniel Beck

นั่นคือสิ่งที่ฉันหมายถึง: ให้ระบบปฏิบัติการเป็นจุดเชื่อมต่อโดยใช้ / etc / fstab จากเวลาดังกล่าวระบบจะอ่าน / etc / fstab พบว่ามี UUID ที่มีจุดเชื่อมต่อที่เกี่ยวข้องและจะใช้สิ่งนั้นแทนค่าเริ่มต้น
dag729

0

ฉันสิ้นสุดการใช้สคริปต์ทุบตีนี้:

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

เมื่อเดือนกันยายนที่ผ่านมาและยังไม่มีใครแสดงความคิดเห็นกับมัน? 'Mount Point' ของคุณควรเป็น 'Device Node' หากคุณคาดว่าสคริปต์นี้จะทำในสิ่งที่ความคิดเห็นพูด

1
@Blakat โหนดอุปกรณ์ไม่ใช่สิ่งที่ OP ขอมา จุดเมาน/Volumes/…ต์คือสิ่งที่ทุกคนพูดถึงถ้าฉันอ่านคำถามนี้ถูกต้อง
slhck

หากคุณกำลังใช้sedอยู่แล้วที่grepและcutมีความไร้ประโยชน์ ; diskutil info "$1" | sed -n '/^ *Mount Point: */!d;s///;s/ *$//p'
tripleee

0

นี่คือสิ่งที่ฉันใช้ในเชลล์สคริปต์ของฉันใน OS X

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

คุณสามารถเพิ่มประโยคสองสามประโยคเพื่ออธิบายวิธีการทำงานของมันได้หรือไม่? ขอบคุณ
fixer1234

นี่คือวิธีการพูดแบบวงเวียนdf | awk '$6 == "/Volumes/myvolume" { print $6 }'นั่นคือพิมพ์เส้นทางเสียงถ้ามันตรงกับที่คาดไว้ grep -Eธงเป็นฟุ่มเฟือยที่นี่และgrepจะไม่ได้ผลเพราะ Awk แล้วรู้ค่อนข้างดีวิธีการเพื่อให้ตรงกับการแสดงออกปกติ
tripleee

คำสั่งที่มีประโยชน์มากขึ้นอาจจะ grep สำหรับปริมาณการซื้อขายก่อนที่จะพิมพ์เฉพาะข้อมูลที่หกหรือดียิ่งขึ้นเปลี่ยนคนแรกที่$6ไป$1ในความคิดเห็นก่อนหน้าของฉัน
tripleee

-1

สิ่งนี้อาจทำงานได้ดีกว่า:

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

6
ทำไมมันถึงทำงานได้ดีกว่า?
bertieb

เดนนิสยินดีต้อนรับสู่ Super User สองสามคำตอบอื่น ๆ ไม่ใช่ตัวอย่างที่ดี แต่เป้าหมายของคำตอบคือให้ความรู้มากกว่าแค่ให้โค้ดตัดและวาง ฉันไม่ใช่ coder ดังนั้นฉันจึงไม่สามารถระบุได้ว่าโซลูชันของคุณดีแค่ไหน แต่ฉันสงสัยว่าความคิดเห็นของ bertieb และบางที downvote ไปที่ความจริงที่ว่านี่เป็นเพียงโค้ดที่ไม่ได้อธิบายมากกว่าคุณภาพของโซลูชัน คุณสามารถเพิ่มประโยคสองสามประโยคเพื่ออธิบายสิ่งนี้และสิ่งที่ทำให้เป็นทางออกที่ดีกว่าสิ่งที่คุณเปรียบเทียบกับอะไร ขอบคุณ
fixer1234
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.