Помогите с сценарием оболочки для хранения банковских выписок в разреженном пакете на OSX - PullRequest
0 голосов
/ 08 марта 2011

В попытке сделать СУХОЙ я пытаюсь автоматизировать мой ежемесячный рабочий процесс загрузки банковских выписок, а затем сохранять их в безопасном Sparse Bundle.

Я создал скрипт, который использует hdiutil mount для монтированиямой sparsebundle и hdiutil detach для размонтирования / извлечения диска и образа (ВНИМАНИЕ: если вы используете unmount, здесь злоумышленники смогут монтировать том без запроса пароля).

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

hdiutil mount -owners on -stdinpass <name of image>

добавить следующие выходные результаты

 /dev/disk1             Apple_partition_scheme          
 /dev/disk1s1           Apple_partition_map             
 /dev/disk1s2           Apple_HFS             /Volumes/Bank-Statements

В данный момент скрипт просто жестко закодирован в hdiutil detach disk1s2, что плохо, потому чтозначение изменится, если я когда-либо установлю другие вещи, когда это выполнится.Как мне просто схватить /dev/disk1s2?Я знаю, что могу сделать

hdiutil mount -owners on -stdinpass <name of image> | grep "Bank" |

, но после этого я застрял.Я знаю, что это можно сделать с помощью Perl или Ruby, но мне бы хотелось, чтобы это было решено с помощью awk, grep или sed, поскольку я не настолько знаком с этими инструментами, и это может быть хорошим опытом обучения.

Спасибо!

Ответы [ 2 ]

1 голос
/ 08 марта 2011

Оба OS X grep и GNU grep поддержка Регулярные выражения, совместимые с Perl с использованием опции -P:

hdiutil mount ... | grep -Po '^[^ ]+(?= .*Bank.*)'

Команда sed будет похожа:

hdiutil mount ... | sed -n '/Bank/s/^\([^ ]\+\) .*/\1/p'

Любая команда выведет все непробельные символы, начинающиеся с начала строки в строке (строках), которые включают слово «Банк». Если команда hdiutil выводит вкладки, то вы можете изменить указанные выше пробелы на [[:blank:]], которые будут соответствовать пробелам или вкладкам. Например:

hdiutil mount ... | grep -Po '^[^[:blank:]]+(?=[[:blank:]].*Bank.*)'

или

hdiutil mount ... | sed -n '/Bank/s/^\([^[:blank:]]\+\)[[:blank:]].*/\1/p'
1 голос
/ 08 марта 2011

Звучит круто!

Самое прямое решение - с помощью awk (может быть, sed).

Я оставляю ваш "grep" Bank "как awk, а sed может" grep "цели тоже.

hdiutil mount -owners on -stdinpass <name of image> | awk '/Bank-Statements/ { print $1}'

(учитывая вышеприведенный пример вывода) вернет

/dev/disk1s2

(если нет пробелов перед / dev ...., затем измените $ 1 на $ 2)

Надеюсь, это поможет.

...