Bash-Skript; MacOS-Datenträgernummer basierend auf der Laufwerksgröße verarbeiten ... GREP

404
Danny Shepherd

Ich freue mich darauf, ein paar CoreStorage-Befehle automatisch auf Laufwerke zu schreiben. Das Problem ist, dass eines der Laufwerke extern ist, was bedeutet, dass es auf dem System wie alles von Diskette2 bis Diskette4 erscheint und ich kann es nicht zuverlässig erraten.

Das Laufwerk ist jedoch immer entweder 5 TB oder 8 TB, wie von diskutil angegeben. Könnte ein GREP-Assistent einen Weg finden, um die Diskussil-Liste nach 5-TB- oder 8-TB-Laufwerken zu durchsuchen, und falls gefunden, diesen Bezeichner im folgenden Befehl verwenden?

Ich habe einige Teile des Puzzles, aber nicht genug, um zu wissen, wie man nach 5 TB oder 8 TB sucht und dann die resultierende Datenträgernummer in die Variable eingibt.

/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 

Die diskutil-Ausgabe sieht wie oben aus. Ich habe keine der Laufwerke, die ich anvisieren möchte, aber ich möchte die Festplattenkennung für das 1,0-TB-Laufwerk, das sich in einem Diskettenlaufwerk befindet

1
Könnten Sie bitte [edit] (https://superuser.com/posts/1220227/edit) hinzufügen, um einen Teil der Ausgabe von "diskutil" mit und ohne die zu identifizierende Festplatte aufzunehmen? Eric Renouf vor 6 Jahren 0

1 Antwort auf die Frage

0
Eric Renouf

Angenommen, Ihre Ausgabe sieht in diesem Beispiel so aus awk, dass Sie den Disk:Wert wie folgt abrufen können:

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

Dies wird für die erste Zeile suchen, die sagen, 1.0 TBoder 5.0 TBoder 8.0 TBauf sie, und drucken Sie das letzte Feld, das die Platten - ID sein geschieht

Um diesen Wert in einer Variablen zu speichern, verwenden Sie die Befehlsersetzung:

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

Jetzt enthält die Variable disk_iddie Ausgabe des Befehls

Hi Eric. Ich bekomme leider keine Ausgabe von diesem Befehl. Könnte das sein, weil in dem Beispiel, mit dem Sie verlinkt haben, sie eigentlich "diskutil cs list" und nicht "diskutil list" machen, was zu einem anderen Ergebnis führt. Um alle Laufwerke und nicht nur CoreStorage-Volumes anzuzeigen, müsste die Standard-Diskussionsliste verwendet werden. Danny Shepherd vor 6 Jahren 0
@DannyShepherd, dann musst du mir ein Beispiel für die Ausgabe geben. Ich habe keinen Zugriff auf "diskutil". Wenn Sie also Ihre Frage nicht mit dem Text bearbeiten, den Sie bearbeiten möchten, muss ich nur raten, was ich analysieren möchte Eric Renouf vor 6 Jahren 0
Hi @Eric hat ein Beispiel für den Ausdruck aus der Diskussil Liste hinzugefügt Danny Shepherd vor 6 Jahren 0
@DannyShepherd Danke, ich habe meine Antwort aktualisiert, um zu zeigen, wie man die Platten-ID für die erste Instanz einer bestimmten Größe erhält Eric Renouf vor 6 Jahren 0
Hi Eric, das ist perfekt! Wie kann ich diese Antwort annehmen und in einer Variablen in einem Folgebefehl verwenden? Zum Beispiel weiß ich jetzt, dass es "disk0" ist, wie kann ich diskutil info $ resultieren Danny Shepherd vor 6 Jahren 0
In bash können Sie $ (...) `für jeden Befehl verwenden, um das` stdout 'des Befehls als String zurückzuholen. Weisen Sie das einfach einer Variablen zu und Sie haben es. . . Ich werde aktualisieren, um zu zeigen Eric Renouf vor 6 Jahren 0