Bash Script; обработка номера диска macOS в зависимости от размера диска ... GREP

392
Danny Shepherd

Я хочу автоматически написать несколько команд CoreStorage на дисках. Проблема в том, что один из дисков является внешним, что означает, что он может быть подключен к системе как что-либо от диска 2 до диска 4, и я не могу с уверенностью предположить.

Диск, однако, всегда будет 5 или 8 ТБ, как указано в diskutil. Так сможет ли мастер GREP найти способ поиска по списку дисководов на дисках по 5 ТБ или 8 ТБ, и, если он найден, использовать этот идентификатор в следующей команде?

У меня есть несколько кусочков головоломки, но их недостаточно, чтобы узнать, как искать 5 ТБ или 8 ТБ, а затем ввести полученный номер диска в переменную.

/dev/disk0 (internal):  #: TYPE NAME SIZE IDENTIFIER 0: GUID_partition_scheme 1.0 TB disk0 1: EFI EFI 314.6 MB disk0s1 2: Apple_CoreStorage Macintosh HD 900.4 GB disk0s2 3: Apple_Boot Recovery HD 650.0 MB disk0s3 4: Apple_HFS Golden 61.0 GB disk0s4 5: Microsoft Reserved 16.8 MB disk0s5 6: Microsoft Basic Data 38.0 GB disk0s6  /dev/disk1 (internal, virtual): #: TYPE NAME SIZE IDENTIFIER 0: Apple_HFS Mac HD +900.0 GB disk1 Logical Volume on disk0s2 3CE3A410-049C-42DC-AB48-2191A122F04F Unencrypted  /dev/disk2 (disk image): #: TYPE NAME SIZE IDENTIFIER 0: GUID_partition_scheme +1.5 TB disk2 1: EFI EFI 209.7 MB disk2s1 2: Apple_HFS Time Machine Backups 1.5 TB disk2s2  /dev/disk3 (disk image): #: TYPE NAME SIZE IDENTIFIER 0: +1.5 TB disk3 

Выходные данные diskutil выглядят так, как указано выше. У меня нет дисков, на которые я бы хотел ориентироваться, но, скажем, я хочу получить идентификатор диска для накопителя емкостью 1,0 ТБ, который равен disk0 в

1
Не могли бы вы [отредактировать] (https://superuser.com/posts/1220227/edit) включить некоторые выходные данные `diskutil` с и без диска, который вы хотите идентифицировать? Eric Renouf 7 лет назад 0

1 ответ на вопрос

0
Eric Renouf

Предполагая, что ваш вывод выглядит так, как в этом примере, вы можете использовать awkдля получения Disk:значения следующим образом:

diskutil list | awk '/(1.0|5.0|8.0) TB/ ' 

Это будет искать первую строку, которая говорит 1.0 TBили 5.0 TBили 8.0 TBна нем, и напечатать последнее поле, которое, как оказалось, является идентификатором диска

Чтобы сохранить это значение в переменной, используйте подстановку команд:

disk_id="$(diskutil list | awk '/(1.0|5.0|8.0) TB/ ')" 

теперь переменная disk_idбудет содержать вывод команды

Привет, Эрик. Я не получаю вывод от этой команды, к сожалению. Может быть, это потому, что в приведенном вами примере они на самом деле делают «diskutil cs list», а не «diskutil list», который дает другое. Это должно быть со стандартным «списком дисководов», чтобы показать все диски, а не только тома CoreStorage. Danny Shepherd 7 лет назад 0
@DannyShepherd тогда вам придется дать мне пример вывода. У меня нет доступа к `diskutil`, поэтому, если вы не отредактируете свой вопрос, включив в него текст, который вы хотите обработать, мне останется только догадываться, что анализировать Eric Renouf 7 лет назад 0
Привет @Eric добавил пример распечатки из списка diskutil Danny Shepherd 7 лет назад 0
@DannyShepherd спасибо, я обновил свой ответ, чтобы показать, как получить идентификатор диска для первого экземпляра определенного размера Eric Renouf 7 лет назад 0
Привет Эрик, это прекрасно! Как я могу взять этот ответ и использовать его в переменной в последующей команде? Например, теперь я знаю, что это «disk0», например, как я могу сделать diskutil info $ result Danny Shepherd 7 лет назад 0
В bash вы можете использовать `$ (...)` вокруг любой команды, чтобы вернуть `stdout` команды в виде строки, просто присвойте ее переменной, и вы получите ее. , , Я обновлю, чтобы показать Eric Renouf 7 лет назад 0