Знайдіть конкретний прикріплений диск, а не том, за допомогою Applescript


2

У мене є сценарій, який я використовую для форматування будь-якої вставленої SD-карти, копіювання даних з певних папок до неї, потім витягування.

Кожен формат / копія спрацьовує вручну, як частина пакетного процесу з участю, можливо, сотні карт, так що я не стурбований натисканням кнопки "Пуск" не в той час, або на неправильній картці.

Те, що я намагаюся знайти, це те, як зробити абсолютно впевненим, що я пишу правильно диск

Це моя «важлива» лінія
do shell script "diskutil eraseDisk \"MS-DOS FAT16\" " & diskName & " MBRFormat disk6"

The disk6 не є абсолютним, оскільки у мене не завжди є однакова кількість встановлених дисків. Я можу перевірити його вручну, перш ніж запускати партію, використовуючи diskutil list потім змініть цей параметр у сценарії.

Я хотів би мати можливість самостійно перевірити, який диск повинен бути, а потім вставити його як змінну, уникаючи будь-яких "неправильних варіантів".

Виключені диски будуть незнімними & amp; Диски RAM [імовірно немонтируемие обсяги, такі як EFI & amp; Відновлення не потрібно фільтрувати) - вони мають відомі назви томів - але я не можу зрозуміти, як встановити знайдене ім'я тома [відоме або невідоме, оскільки карти SD можна назвати майже всім, перш ніж почати] номер диска.


Особливості використання кард-рідера, вбудованого в моєму моніторі, Dell U2713H
Приєднано через USB2 з Mac Pro 4,1 [з оновленням 5,1 для обладнання]

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

Вибірковий висновок 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

Або ... Використання ioreg -l з наступним результатом

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

як я можу виправити щось подібне grep -A 100 SD/MMC/MS/MSPRO Media | grep disk | awk... щоб знайти disk7


Чи мають картки SD які-небудь характерні властивості, наприклад, розмір, виробник, формат об'ємних даних?
klanomath

Боюся, що немає. Кілька виробників, численні розміри (у мене є трохи "спробувати" процедуру для FAT32, якщо вони занадто великі для FAT16), кілька існуючих форматів, кілька існуючих імен. Це може бути процес усунення відомого [переліку заздалегідь визначених потенційних обсягів] & amp; що залишається є метою.
Tetsujin

Чи використовується зовнішній зчитувач SD-карти або внутрішній (який Mac?) Або обидва?
klanomath

Читач вбудований в мій екран Dell U2713H. Я додам подробиці до питання ...
Tetsujin

Відповіді:


2

Я не такий великий у написанні сценаріїв Apple, але ось ідея, як вирішити вашу проблему.

У першому описаному нижче способі я шукаю в дереві пристроїв system_profiler, щоб отримати DiskIdentifier дискового пристрою, підключеного до пристрою для зчитування карток USB3, вбудованого в монітор Dell. У другому методі я використовую ioreg.

system_profiler:

Щоб отримати DiskIdentifier SD-карти, приєднаної до зовнішнього SD-читача, використовуйте:

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

с grep -A 30 0x0307: вивести наступні 30 рядків після знаходження рядка 0x0307
і awk '/disk/ {gsub("BSD Name:", ""); print $NF}' щоб отримати номер диска, але видалити його Ім'я BSD: з виходу.

У моїй системі команда займає близько 10 секунд.

Можливо, вам доведеться відрегулювати значення -A і рядок характеристик (у наведеному вище прикладі я використовував ваш USB3.0 Card Reader ID продукту: 0x0307). Перевірте дерево пристрою за допомогою програми Інформація про систему і шукати відповідний рядок.

Оберніть все це у змінну типу $ SDDiskToErase і передайте її вашій diskutil eraseDisk команду.

Використовуючи вищезгадану трохи змінену лінію, я отримав дискІдентифікатор (disk2) зовнішнього USB-диска, безпосередньо приєднаного до мого Mac:

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

ioreg:

Іншою початковою командою є ioreg -l | grep … (… Схоже на вище), що набагато швидше (менше секунди).

Приєднайте SD-карту та отримайте її з DiskIdentifier diskutil list. Потім зробіть дамп ioreg with ioreg -l > ~/Desktop/ioreg-dump.txt.

Шукайте в ioreg-dump.txt для знайденого вище диска. Диск підключений до високоякісного контролера (той, що на вашому моніторі), що візуалізується довгими вертикальними і короткими горизонтальними "лініями" ліворуч у нему файлі. Використовуйте характерний і унікальний рядок контролера, як серійний номер, IOName, deviceID тощо. Потім виберіть кількість наступних рядків для -A, достатньо великих, щоб містити diskIdentifier (наприклад, disk6), але досить малі, щоб не містити ідентифікаторів обсягу (наприклад, disk6s1).

Приклад:

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

Щоб скористатися командою в Apple Script, ви повинні уникнути всієї внутрішньої " і \ T :

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

стає:

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

Я спробував grep - трохи сліпо, я повинен визнати - & amp; він плюнув кілька непарних помилок; так що я просто побіг system_profiler самостійно, сподіваючись побачити, звідки вони прийшли ... можливо, не наймудріші ... повну хвилину пізніше, я мав Encyclopaedia Britannica info для просіювання.
Tetsujin

@Tetsujin Hmm приєднайте SD-карту, перевірте дискІдентифікатор з diskutil list потім відкрийте System Information.app і знайдіть diskxxx у дереві пристроїв, а потім скористайтеся деяким рядком характеристик чудового пристрою. Ви пропустили найважливішу частину в "специфіці" вище: Вищий пристрій, де прикріплений SD-диск.
klanomath

велике спасибі за вашу допомогу; Багато чого з цього, як ви, напевно, можете собі уявити трохи за межами моєї звичайної зони комфорту. Від подальшого Googling - я можу зробити краще з df тільки отримую список змонтованих дисків? Моєю проблемою буде grep & amp; змінна $ SDDiskToErase, з якою я не маю багато досвіду. Редагування у зразку df до мого питання ...
Tetsujin

@Tetsujin Чи не могли б ви приєднати SD-карту до кард-рідера і розмістити частину системної інформації, яка містить дискІdentifier І чудове дерево USB-пристроїв? Чи є повний bash-скрипт і сценарій Apple доступні де-небудь?
klanomath

Я не впевнений, що це буде наше рішення, tbh - потрібно майже хвилину для обробки вихідних даних системного профілю, що додасть приблизно 2 години до стандартного копіювання. Я десь ближче користуюся set BSD_disk to do shell script "df | grep -Ev 'KickMeHard|MacWin7|Downloads|OhDaSpace|JuSpace|TMach|RAM Disk' | grep -o 'disk[1-9]'" незважаючи на те, що воно повертає диск1 і диск7 [поточна правильна відповідь]
Tetsujin
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.