2 votos

Encontrar disco adjunto específico, no el volumen, por Applescript

Tengo un script que uso para formatear cualquier tarjeta SD insertada, copiar los datos de carpetas específicas para, a continuación, extraiga.

Cada formato/copia se activa manualmente, como parte de un proceso por lotes que implican tal vez un centenar de cartas, así que no estoy preocupado acerca de golpear el botón de Inicio en el momento equivocado, o en la tarjeta equivocada.

Lo que estoy tratando de encontrar es cómo hacer absolutamente seguro de que estoy escribiendo para la correcta disco

Este es mi 'importante' de la línea de
do shell script "diskutil eraseDisk \"MS-DOS FAT16\" " & diskName & " MBRFormat disk6"

El disk6 no es absoluta, ya que no siempre tienen el mismo número de unidades montadas. Puedo comprobar manualmente antes de iniciar el proceso por lotes, utilizando diskutil list , a continuación, cambie el valor del parámetro en la secuencia de comandos.

Lo que me gustaría ser capaz de hacer es tener el mismo script de verificación ¿qué coche debe ser, a continuación, insertar una variable, evitando cualquier tipo de 'malas decisiones'.

Las unidades excluidas, no sería removibles y Discos RAM [presumiblemente desmontar volúmenes como EFI & Recovery no necesita ser filtrada] - estos han conocido los nombres de volumen - pero no puedo averiguar cómo configurar un nombre de volumen [conocido o desconocido, como las tarjetas SD pueden ser llamados prácticamente cualquier cosa antes de iniciar] para un determinado número de disco.


Detalles sobre el lector de tarjetas integrado en mi monitor Dell U2713H
Adjunta sobre USB2 desde un Mac Pro 4,1 [con 5,1 actualización de hardware]

USB Hi-Speed Bus:

  Host Controller Location: Built-in USB
  Host Controller Driver:   AppleUSBEHCI
  PCI Device ID:    0x3a3c 
  PCI Revision ID:  0x0000 
  PCI Vendor ID:    0x8086 
  Bus Number:   0xfa 

Hub:

  Product ID:   0x8043
  Vendor ID:    0x0451  (Texas Instruments)
  Version:  1.00
  Serial Number:    79000089BFB9
  Speed:    Up to 480 Mb/sec
  Location ID:  0xfa200000 / 2

//snips other devices//

USB3.0 Card Reader:

  Product ID:   0x0307
  Vendor ID:    0x0bda  (Realtek Semiconductor Corp.)
  Version:  1.63
  Serial Number:    201006010301
  Speed:    Up to 480 Mb/sec
  Manufacturer: Realtek
  Location ID:  0xfa233000 / 5

Ejemplo de salida de df

Filesystem    512-blocks       Used  Available Capacity   iused     ifree %iused  Mounted on
/dev/disk1s2  1950314272  485618064 1464184208    25%  60766256 183023026   25%   /
devfs                412        412          0   100%       714         0  100%   /dev
/dev/disk0s2  3906357344 1195025808 2711331536    31% 149378224 338916442   31%   /Volumes/JuSpace
/dev/disk3s2  1951855464  635192376 1316663088    33%  79399045 164582886   33%   /Volumes/Downloads
/dev/disk2s2  5858067520 2309215360 3548852160    40% 144325958 221803260   39%   /Volumes/OhDaSpace
/dev/disk4s2  5753889792 4638480736 1115409056    81% 289905044  69713066   81%   /Volumes/TMach
map -hosts             0          0          0   100%         0         0  100%   /net
map auto_home          0          0          0   100%         0         0  100%   /home
/dev/disk3s4   408324240  210669592  197654648    52%    200589  98828207    0%   /Volumes/MacWin7
/dev/disk5       2097152     700536    1396616    34%     87565    174577   33%   /Volumes/RAM Disk
/dev/disk7s1     1936768     104192    1832576     6%       512         0  100%   /Volumes/F_CARD

O... El uso de ioreg -l con el siguiente resultado

| |   |   |             +-o Generic- SD/MMC/MS/MSPRO Media  <class IOMedia,$
| |   |   |               | {
| |   |   |               |   "Removable" = Yes
| |   |   |               |   "Content" = "FDisk_partition_scheme"
| |   |   |               |   "Whole" = Yes
| |   |   |               |   "Leaf" = No
| |   |   |               |   "BSD Name" = "disk7"

¿cómo puedo solucionar algo como grep -A 100 SD/MMC/MS/MSPRO Media | grep disk | awk... encontrar el disk7

2voto

klanomath Puntos 19587

No estoy bien en la escritura de Apple scripts pero aquí es una idea de cómo resolver su problema.

En el primer método que se describe a continuación buscar en el árbol de dispositivos de system_profiler para obtener el Identificadordedisco de un disco de un dispositivo conectado a la USB3 lector de tarjetas integrado en el monitor de Dell. En el segundo método que uso ioreg.

system_profiler:

Para obtener el Identificadordedisco de una tarjeta SD conectada a la SD externa-Lector de usar algo como:

system_profiler -detailLevel mini | grep -A 30 0x0307 | awk '/disk/ {gsub("BSD Name:", ""); print $NF}'

con grep -A 30 0x0307: de salida el próximo 30 de líneas después de encontrar la cadena 0x0307
y awk '/disk/ {gsub("BSD Name:", ""); print $NF}' para obtener el número de disco, pero quitar BSD Nombre: de la salida.

El comando tarda unos 10 segundos en mi sistema.

Puede que tenga que ajustar el valor de a y la característica de la cadena (en el ejemplo anterior he utilizado la USB3.0 Lector de Tarjetas de ID de Producto: 0x0307). Compruebe el dispositivo de árbol con la aplicación del Sistema de Información y la búsqueda de una adecuada cadena.

Envolver todos los que en una variable como $SDDiskToErase y se la entrega a su diskutil eraseDisk comando.

Utilizando la anterior ligeramente modificada de la línea tengo el identificadordedisco (disco 2) de un disco externo USB conectado directamente a mi Mac:

system_profiler -detailLevel mini | grep -A 30 0x1c26 | awk '/disk/ {gsub("BSD Name:", ""); print $NF}'
disk2

ioreg:

En otro orden inicial es ioreg -l | grep … ( ... ) es similar a la anterior), que es mucho más rápido (menos de un segundo).

Adjuntar una tarjeta SD y obtener su Identificadordedisco con diskutil list. A continuación, hacer un volcado de ioreg con ioreg -l > ~/Desktop/ioreg-dump.txt.

Búsqueda en ioreg-dump.txt para el identificadordedisco encontrado anteriormente. El disco está conectado a un superior (controlador de la una en el monitor) se visualiza por el largo vertical y horizontal corta "líneas" de la izquierda en el mudo de archivo. El uso de una característica y única cadena de la controladora como un número de serie, IOName, deviceID etc. A continuación, seleccione un número de las líneas posteriores para -Una lo suficientemente grande como para contener el identificadordedisco (por ejemplo, disk6) pero no lo suficientemente pequeño para contener el volumen de identificadores (por ejemplo, disk6s1).

Ejemplo:

ioreg -l | grep -A 350 0x100000214 | awk '/disk/ {gsub("\"",""); print $NF}'
disk2

Para utilizar el comando en el Script de Apple tienes que escapar de todos los interiores " y \:

"ioreg -l | grep -A 10 SD/MMC/MS/MSPRO | awk '/disk/ {gsub("\"",""); print $NF}'"

se convierte en:

do shell script "ioreg -l | grep -A 10 SD/MMC/MS/MSPRO | awk '/disk/ {gsub(\"\\\"\",\"\"); print $NF}'"

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X