#shell #applescript
#оболочка #applescript
Вопрос:
У меня есть скрипт оболочки, который выводит имена файлов (по одному в строке). Я хочу поместить этот вывод в список в AppleScript.
Как я могу это сделать?
Бонусные баллы за то, как затем превратить эти строки имени файла в файловые объекты.
Редактировать:
При попытке этого:
set theFiles to {}
repeat with i from 1 to count of filenames
set end of theFiles to (POSIX file (item i of filenames))
end repeat
Я получаю это:
error "Finder got an error: Can’t get POSIX file "/path/to/file"." number -1728 from file "Macintosh HD:path:to:file"
РЕДАКТИРОВАТЬ-2:
Оказывается, finder не знает о файле, который создается после запуска инструкции «tell». Как мне обновить его или сообщить ему о новом файле?
РЕДАКТИРОВАТЬ-3:
Это сработало (обратите внимание на добавление «my»):
set theFiles to {}
repeat with i from 1 to count of filenames
set end of theFiles to (my POSIX file (item i of filenames))
end repeat
Комментарии:
1. Это ошибка «Finder». Finder не знает эту команду и, следовательно, выдает ошибки. Удалите эту команду из вашего блока Finder tell. Это обычная команда applescript, а не команда Finder.
Ответ №1:
set myFilenamesList to paragraphs of (do shell script "path/to/shell/script")
set firstFileObject to POSIX File (item 1 of myFilenamesList)
Когда у вас есть список, вы используете цикл повтора, чтобы выполнить итерацию по списку и что-то сделать с элементами в списке. Например, если вам нужен список файловых объектов, вы могли бы сделать это.
set fileObjectsList to {}
repeat with i from 1 to count of myFilenamesList
set end of fileObjectsList to POSIX File (item i of myFilenamesList)
end
return fileObjectsList
Конечно, это не имеет особого смысла делать, потому что, как только у вас появятся файловые объекты в списке, вам нужно будет повторить этот список, чтобы что-то сделать с этими объектами… таким образом, вы будете повторять список 2 раза, когда, вероятно, будет достаточно 1 раза. Поэтому я бы сделал что-то вроде этого вместо этого…
repeat with i from 1 to count of myFilenamesList
set thisFileObject to POSIX File (item i of myFilenamesList)
-- do something with the file object "thisFileObject"
end
Комментарии:
1. Как бы я создал файловые объекты для всех имен файлов. Мне это нужно в объекте list.