Получите полное содержание каталога с AppleScript

Я должен получить все (видимое) содержание папки и ее подпапок как список. Действительно ли это возможно?

8
задан tshepang 12 October 2014 в 19:42
поделиться

2 ответа

Я уверен, что есть команда Shell, которая может сделать это быстрее, но вот один из способов в чистом AppleScript, который дает вам полный контроль над форматированием, что вы хотите отобразить.

property kFileList : {}

tell application "Finder"
    set source_folder to choose folder with prompt "Please select directory."
    my createList(source_folder)
end tell

on createList(item_list)
    set the the_items to list folder item_list without invisibles
    set item_list to item_list as string
    repeat with i from 1 to number of items in the the_items
        set the_item to item i of the the_items
        set the_item to (item_list & the_item) as alias
        set this_info to info for the_item
        set file_name to name of this_info
        set end of kFileList to file_name
        if folder of this_info is true then
            my createList(the_item)
        end if
    end repeat
end createList

На боковой заметке есть также приложения листинга файлов, которые могут сделать это быстрее, чем AppleScript.

Обновление: В результате этого обсуждения вот функция снова, но на этот раз используя обновленные API. Это может, вероятно, мог бы использовать некоторую очистку, но она работает достаточно разбираться в каталоге моего рабочего стола (и это глубокая, глубокая папка для меня):

property kFileList : {}

tell application "Finder"
    set source_folder to choose folder with prompt "Please select directory."
    my createList(source_folder)
end tell

return kFileList

on createList(mSource_folder)
    set item_list to ""

    tell application "System Events"
        set item_list to get the name of every disk item of mSource_folder
    end tell

    set item_count to (get count of items in item_list)

    repeat with i from 1 to item_count
        set the_properties to ""

        set the_item to item i of the item_list
        set the_item to ((mSource_folder & the_item) as string) as alias

        tell application "System Events"
            set file_info to get info for the_item
        end tell

        if visible of file_info is true then
            set file_name to displayed name of file_info
            set end of kFileList to file_name
            if folder of file_info is true then
                my createList(the_item)
            end if
        end if

    end repeat
end createList

Я должен быть подписан на неправильные списки рассылки или отсутствуют, поскольку эти изменения API были приняты И я никогда не раз слышал о них. Я использовал свой первый предложенный метод в десятках проектах в основном, потому что это был код, ориентированный на Apple, и полное отсутствие ошибок, использующих это (даже во время этого письма), никогда не вызывающую необходимость для меня, чтобы сообщить Отказ

Rightabout является справедливой игрой, и мои извинения за злобный недостаток в MMCGRAIL, и я заменяю его с помощью UPVOTE. Просто чтобы быть понятным, я никогда не думал, что ответ, данный MMCGrail был неправ. Это отличный одноранговый метод удобства, но я остался подальше от моих комментариев, уже данных. Но скорее, это было его голосование и его заявил контекст, с которым я обидел. В конце концов, это просто код, и я думаю, что мы все здесь по той же причине: найти лучший способ сделать то, что мы делаем. Кажется, у меня теперь есть несколько обновлений, чтобы вписать.

ура

8
ответ дан 5 December 2019 в 08:52
поделиться

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

  tell application "Finder"
     set file_list to entire contents of (choose folder with prompt "Please select directory.")
   end tell 

если вам нужен список имен файлов, вы можете сделать это

  tell application "Finder"
    set file_list to name of every file of entire contents of (choose folder with prompt "Please select directory.")
   end tell

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

"Как насчет сглаза на оба ваших дома? :-)

Да, целое содержимое делает именно то, что вы говорите - но оно легко подавляется на большие папки и занимает вечность (и день, если вы на 10.6). Это нормально для небольших вещей, например, извлечения всех файлов одного типа из папки, о которой вы известно, что в ней будет только небольшое количество файлов.

Рекурсивный метод также работает хорошо - но он использует "list folder", и в словаре для него сказано, что он устарел, и мы не должны использовать его больше."

Так что я слышу заявление, что я был неправ! Оба эти решения действительны, но имеют "язвы" или дыры в их использовании. Мои аплодисменты Филипу. Если он решит отредактировать свой ответ (потому что это единственный способ изменить мой голос), я буду рад вернуться и дать ему +1

.
10
ответ дан 5 December 2019 в 08:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: