MacCentre.ru Форум Форум по компьютерам Mac, Mac OS X и продукции Apple
|
Автор |
Сообщение |
zztatarin
Reputation: +34
Зарегистрирован: 04.08.2006 Сообщения: 4260
|
Добавлено: Mon Oct 27, 2008 01:26
|
|
|
Что надо сделать? Отмонтировать все "внешние диски"?
_________________ Дайте мне единицу измерения и я смогу измерить ничтожность и бесконечность. А компьютер мне в х... не упёрся. Мне штангенциркуля хватит.
И ещё. Учу пользоваться документацией
Искренне Ваш ﺗﺘﺮ |
|
Вернуться к началу |
|
Art-Roman
Reputation: +21
Зарегистрирован: 08.11.2006 Сообщения: 3071 Откуда: Казань
|
Добавлено: Mon Oct 27, 2008 01:43
|
|
|
Перечислил в скрипте три тома на винте, при аккуратном еджекте с делеем винт останавливается (чего и требовалось). Сохранил как программу только для запуска, поместил на панель файндера. осталось приделать иконки, чтоб нагляднее было. Получилось почти то, что хотел, лишь неуневерсально немного (изменив имя тома, придётся изменять программу).
Цитата: | Что надо сделать? Отмонтировать все "внешние диски"? | Была поставлена задача отмонтировать внешний винт (отмонтировать тома на нём тоже подошло). Нет ли способа обратиться к винту и получить список его томов?
В /dev/ имеются
Код: | disk0, disk0s1, disk0s2, disk0s3, disk1, disk1s1, disk1s2, disk1s3, disk2 | и
Код: | rdisk0, rdisk0s1, rdisk0s2, rdisk0s3, rdisk1, rdisk1s1, rdisk1s2, rdisk1s3, rdisk2 | соотв-но.
Но disk1sX после размонтирования томов не исчезает, только после отключения питания коробки.
|
|
Вернуться к началу |
|
zztatarin
Reputation: +34
Зарегистрирован: 04.08.2006 Сообщения: 4260
|
Добавлено: Mon Oct 27, 2008 02:53
|
|
|
Код: | set tReturn to do shell script "diskutil list" | вернет список всех винтов в системе, Код: | set tReturn to do shell script "diskutil list /dev/disk0" |
всех партишенов на первом мастере Код: | set tReturn to do shell script "diskutil list /dev/disk1" | всех партишенов на первом слейве соответственно.
Кроме того:
Код: | diskutil information /dev/disk0 | вернет некоторое количество информации о первом мастере, а Код: | diskutil information /dev/disk0sXXX | о соответствующем партишене включая имя, которое высвечивается на десктопе.
PS. Имена дисков, кроме того, можно получить через Finder. Рекомендую "почитать" на эту тему /Library/Scripts/Finder Scripts/*.scpt
_________________ Дайте мне единицу измерения и я смогу измерить ничтожность и бесконечность. А компьютер мне в х... не упёрся. Мне штангенциркуля хватит.
И ещё. Учу пользоваться документацией
Искренне Ваш ﺗﺘﺮ |
|
Вернуться к началу |
|
6Ж1П
Reputation: 0
Зарегистрирован: 27.08.2008 Сообщения: 3
|
Добавлено: Tue Oct 28, 2008 22:27
|
|
|
Чего их получать Цитата: | get every item of desktop |
|
|
Вернуться к началу |
|
Art-Roman
Reputation: +21
Зарегистрирован: 08.11.2006 Сообщения: 3071 Откуда: Казань
|
Добавлено: Tue Oct 28, 2008 23:30
|
|
|
У меня на десктопе много чего кроме дисков
|
|
Вернуться к началу |
|
zztatarin
Reputation: +34
Зарегистрирован: 04.08.2006 Сообщения: 4260
|
Добавлено: Thu Oct 30, 2008 01:38
|
|
|
Ну... Нет ничего сложного.
Можно Код: | tell application "Finder" to set tDiskList to every disk of desktop | получить список всех дисков. Или Код: | tell application "Finder" to set tFolderList to every folder of desktop | получить список всех папок. Или Код: | tell application "Finder" to set tFileList to every file of desktop | получить список всех файлов.
NOTE: Каждый смонтированый диск это FinderItem. Но не каждый Item – Disk. Кроме того, Disk обладает свойствами Folder-а. Поэтому в tFolderList будут не только папки, но и диски.
В случае нашей задачи мы можем сделать следующее:
1. Извлечь все диски которые извлечь возможно
Код: | tell application "Finder" to eject every disk of desktop | По идее это должно работать и с виртуальными, и с внешними, и сетевыми дисками. Проверить не могу, нет внешних.
2. Получить список всех точек монтирования
Код: | set tMountPointList to {}
tell application "Finder"
set tURLList to URL of every disk of desktop
repeat with i from 2 to number of items in the tURLList -- Первый элемент это загрузочный диск, его отмонировать не рекомендуется.
set AppleScript's text item delimiters to {"/"}
set tUrl to text items of (item i of the tURLList)
set tMountPoint to {}
repeat with j from 4 to (number of items in the tUrl) -- Первые три элемента это "file://localhost/"
copy item j of the tUrl to end of tMountPoint
end repeat
set tMountPoint to tMountPoint as string
set AppleScript's text item delimiters to {""}
copy tMountPoint to end of tMountPointList
end repeat
return tMountPointList
end tell
| Что делать с этим списком понятно?
PS. Немного подправил код. Так изящнее.
_________________ Дайте мне единицу измерения и я смогу измерить ничтожность и бесконечность. А компьютер мне в х... не упёрся. Мне штангенциркуля хватит.
И ещё. Учу пользоваться документацией
Искренне Ваш ﺗﺘﺮ
Последний раз редактировалось: zztatarin (Wed Feb 11, 2009 21:01), всего редактировалось 3 раз(а) |
|
Вернуться к началу |
|
Art-Roman
Reputation: +21
Зарегистрирован: 08.11.2006 Сообщения: 3071 Откуда: Казань
|
Добавлено: Thu Oct 30, 2008 02:04
|
|
|
Обалдеть
Спасибо за подробное разъяснение, пока просто через перечисление имён разделов отключаю через небольшие delay, подключаются тоже норм. Будет время, попробую сделать как положено, с получением имён разделов с диска
|
|
Вернуться к началу |
|
Aha_pupok
Reputation: 0
Зарегистрирован: 14.07.2003 Сообщения: 139 Откуда: [мск]
|
Добавлено: Thu Oct 30, 2008 18:42
|
|
|
блин, а я пропустил URL =) ну вот тогда
Код: | set tMountPoint to {}
repeat with j from 4 to (number of items in the tUrl) -- Первые три элемента это "file://localhost/"
copy item j of the tUrl to end of tMountPoint
end repeat |
можно заменить на
Код: | set tMountPoint to (item 4 thru -1 of tUrl) as string |
_________________ http://www.applescript.ru |
|
Вернуться к началу |
|
zztatarin
Reputation: +34
Зарегистрирован: 04.08.2006 Сообщения: 4260
|
Добавлено: Thu Nov 06, 2008 20:50 Просмотреть подсеть |
|
|
Специально не стал кидать в курилку. Рекомендую к изучению. В выходные распишу коментарии.
Описание: |
|
Скачать |
Название файла: |
ping.scpt.zip |
Размер файла: |
2.63 кб |
Скачено: |
45 раз(а) |
_________________ Дайте мне единицу измерения и я смогу измерить ничтожность и бесконечность. А компьютер мне в х... не упёрся. Мне штангенциркуля хватит.
И ещё. Учу пользоваться документацией
Искренне Ваш ﺗﺘﺮ |
|
Вернуться к началу |
|
zztatarin
Reputation: +34
Зарегистрирован: 04.08.2006 Сообщения: 4260
|
Добавлено: Fri Nov 07, 2008 01:59
|
|
|
Немного подправил скрипт, в результате чего он стал более универсальным и выполняется в ЛЮБОЙ системе
Код: | tell application "Finder" to set tHome to home as alias -- Узнать где у нас "дом"
set the error_log to (tHome as string) & "IP.txt" -- Направить туда вывод
set tResult to "" -- установить пустую строку
repeat with tHost from 1 to 254 -- переменная, последний байт адреса
try -- попытка выполнить команду, игнорируя ошибку исполнения.
do shell script "ping -c1 -t3 " & "192.168.1." & tHost administrator privileges yes user name "root" password "" -- выполняем терминальную команду с соответствующими ключами и привилегиями. Вместо "192.168.1." поставить свою подсеть. -c4 и -t3 сейчас не помню, man поможет.
set tResult to result -- результат "пинка" записываем в переменную.
end try
set tReturn to tHost & return & tResult & return & return & return as string -- Записываем номер хоста и переменную с результатом "пинка". Три пустых строки для разделения записей.
set tResult to ""
try
-- Внимание! Следующие три строки позволяют записывать информацию в файл средствами AppleScript-а
open for access file the error_log with write permission -- Открываем файл на запись
write (tReturn & return) to file the error_log starting at eof -- Сбрасываем переменную с номером хоста и результатом "пинка" в конец файла.
close access file the error_log -- Обязательно закрыть файл!
on error
display dialog "Can't write" & result buttons {"OK"} default button 1 -- в случае ошибки вывести диалог
try
close access file the error_log -- и еще раз закрыть файл.
end try
end try
end repeat -- Вуаля! Повторить 254 раза. Хост с номером 255 не существует, однако это броадкаст и возможно все что написано выше излишне. По идее запрос на этот адрес должен вернуть список всех хостов. Проверить не могу, ввиду наличия во внутренней сети всего двух хостов. |
Да уЖ... Абсолютно не читаемо. Скопировать код и вставить в редактор. Нажать на молоток. Разбираться только после этого.
_________________ Дайте мне единицу измерения и я смогу измерить ничтожность и бесконечность. А компьютер мне в х... не упёрся. Мне штангенциркуля хватит.
И ещё. Учу пользоваться документацией
Искренне Ваш ﺗﺘﺮ
Последний раз редактировалось: zztatarin (Fri Nov 07, 2008 02:06), всего редактировалось 1 раз |
|
Вернуться к началу |
|
Art-Roman
Reputation: +21
Зарегистрирован: 08.11.2006 Сообщения: 3071 Откуда: Казань
|
Добавлено: Fri Nov 07, 2008 02:05
|
|
|
Вот теперь работает замечательно
Только не совсем понятно, какая цель, ибо пинг по каждому хосту идёт достаточно небыстро, а во время выполнения программа закрывается только принудительно.
|
|
Вернуться к началу |
|
zztatarin
Reputation: +34
Зарегистрирован: 04.08.2006 Сообщения: 4260
|
Добавлено: Fri Nov 07, 2008 02:07
|
|
|
Цель – обьяснить интересующимся как чего работает.
Дабы работало быстрее менять ключи у ping-а. С -c1 -t1 работает весьма шустренько. Но не везде.
_________________ Дайте мне единицу измерения и я смогу измерить ничтожность и бесконечность. А компьютер мне в х... не упёрся. Мне штангенциркуля хватит.
И ещё. Учу пользоваться документацией
Искренне Ваш ﺗﺘﺮ |
|
Вернуться к началу |
|
zztatarin
Reputation: +34
Зарегистрирован: 04.08.2006 Сообщения: 4260
|
Добавлено: Sun Nov 09, 2008 03:38 Каждые десять минут чего-нибудь делать. |
|
|
Вот код, если автор разрешит, разберу по строчкам. Код: | (* Good luck! e_s_m©2001 :) *)
property from_folder_path : ""
property to_folder_path : ""
property _timeout : 10 -- with interval 10*60seconds = 10 minutes
on idle
--folder, from which copy files
try
tell application "Finder" to ¬
set all_OK to exists folder from_folder_path
on error
set all_OK to false
end try
if not all_OK then ¬
set from_folder_path to ¬
choose folder with prompt "Show folder, from which I will be copying…"
--folder, to one copying files
try
tell application "Finder" to ¬
set all_OK to exists folder to_folder_path
on error
set all_OK to false
end try
if not all_OK then ¬
set to_folder_path to ¬
choose folder with prompt "Show folder, where I will be copying…"
-- get files list in from_folder
try
tell application "Finder" to ¬
set files_need_to_copy to files of folder from_folder_path as alias list
on error -- if only one file
tell application "Finder" to ¬
set files_need_to_copy to 1st file of folder from_folder_path as alias
set files_need_to_copy to files_need_to_copy as list
end try
set count_incoming_files to count files_need_to_copy
try
if count_incoming_files = 0 then ¬
error -- no new files => simple exit idle
activate me
display dialog (count_incoming_files as string) & ¬
" new file(s) are in my folder." & return & "Start copying?" with icon note giving up after 3
on error
return _timeout * 60
end try
--moving files
repeat with i from 1 to count_incoming_files
set file_i to item i of files_need_to_copy
try
tell application "Finder" to ¬
copy file file_i to folder to_folder_path
--tell application "Finder" to delete file file_i
end try
end repeat
return _timeout * 60
end idle
|
_________________ Дайте мне единицу измерения и я смогу измерить ничтожность и бесконечность. А компьютер мне в х... не упёрся. Мне штангенциркуля хватит.
И ещё. Учу пользоваться документацией
Искренне Ваш ﺗﺘﺮ |
|
Вернуться к началу |
|
zztatarin
Reputation: +34
Зарегистрирован: 04.08.2006 Сообщения: 4260
|
Добавлено: Wed Nov 12, 2008 23:51
|
|
|
Код: | property from_folder_path : ""
property to_folder_path : ""
property _timeout : 10 -- with interval 10*60seconds = 10 minutes | Начальная инициализация переменных
Конструкция типа
будет выполнять код, который Вы поместите сюда, между on idle и end idle
Код: | return _timeout * 60
end idle
| при бездействии скрипта _timeout * 60 секунд.
NOTE! Строка return _timeout * 60 обязательна! В противном случае конструкция вернет последнюю использованую переменную, значение которой заранее неизвестно, что приведет к непредсказуемому поведению скрипта.
_________________ Дайте мне единицу измерения и я смогу измерить ничтожность и бесконечность. А компьютер мне в х... не упёрся. Мне штангенциркуля хватит.
И ещё. Учу пользоваться документацией
Искренне Ваш ﺗﺘﺮ
Последний раз редактировалось: zztatarin (Thu Nov 13, 2008 12:52), всего редактировалось 12 раз(а) |
|
Вернуться к началу |
|
zztatarin
Reputation: +34
Зарегистрирован: 04.08.2006 Сообщения: 4260
|
Добавлено: Wed Nov 12, 2008 23:52 Вытащить все адреса, на которые были отправлены письма. |
|
|
Расписывать нечего, думайте сами. Код: | set tPR to ""
tell application "Mail" to activate
tell application "System Events"
tell process "Mail"
click menu item "Previous Recipients" of menu 1 of menu bar item "Window" of menu bar 1
repeat with i from 1 to number of rows of table 1 of scroll area 1 of window "Previous Recipients"
set tPR to (tPR & i as text) & "." & tab
-- set tPR to (tPR & value of text field 1 of row i of table 1 of scroll area 1 of window "Previous Recipients" as text) & tab
set tPR to (tPR & value of text field 2 of row i of table 1 of scroll area 1 of window "Previous Recipients" as text) & return
end repeat
end tell
end tell
set targetFile to ((path to desktop as text) & "MailRecents.txt")
set ff to open for access file targetFile with write permission
write tPR to ff
close access ff |
_________________ Дайте мне единицу измерения и я смогу измерить ничтожность и бесконечность. А компьютер мне в х... не упёрся. Мне штангенциркуля хватит.
И ещё. Учу пользоваться документацией
Искренне Ваш ﺗﺘﺮ |
|
Вернуться к началу |
|
|
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах Вы можете добавлять приложения в этом форуме Вы можете скачивать файлы в этом форуме
|
Powered by phpBB © 2001, 2005 phpBB Group
|