Найти абсолютные пути к содержимому папки - PullRequest
0 голосов
/ 29 ноября 2011

Еще один вопрос для новичка.Я пытаюсь получить абсолютные пути ко всем папкам и файлам внутри папки после ее открытия.Я хотел бы написать что-то вроде

on opening folder this_folder
   tell application "Finder"
      set everyPath to POSIX path of every item in entire contents of this_folder
   end tell

   repeat with n from 1 to count of everyPath
      display dialog item n of everyPath
   end repeat
end opening folder

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

on opening folder this_folder
   tell application "Finder"
      set everyName to name of every item in entire contents of this_folder
      set everyPath to {}
      repeat with n from 1 to count of everyName
         set end of everyPath to POSIX path of item n of everyName
      end repeat
   end tell

   repeat with n from 1 to count of everyPath
      display dialog item n of everyPath
   end repeat
end opening folder

Какие диалоги отображаются как '/file.ext », когда я ищу что-то более похожее на« User / username / documents / folder / file.ext »и« User / username / documents / folder / subfolder / file2.ext ».

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

1 Ответ

0 голосов
/ 30 ноября 2011

Вы не можете делать это так, как пытаетесь. Обычно вы можете просто добавить путь к имени папки, чтобы получить полный путь. Однако вы также получаете имена файлов в подпапках, так что это не будет работать, потому что вы не знаете пути к подпапкам. Таким образом, получение имен от Finder не поможет вам. Более быстрый метод, чем Finder для чего-то подобного, может заключаться в использовании Unix-программы «find».

set this_folder to path to desktop

-- we have to remove the trailing / from the folder path so the
-- returned paths from the find command are correct
set posix_folder to text 1 thru -2 of (POSIX path of this_folder)

-- use find to quickly find the items in this_folder
-- also filter out invisible files and files in invisible folders
-- also filter files inside of package files like ".app" files
set theItems to paragraphs of (do shell script "find " & quoted form of posix_folder & " -name \"*.*\" ! -path \"*/.*\" ! -path \"*.app/*\" ! -path \"*.scptd/*\" ! -path \"*.rtfd/*\" ! -path \"*.xcodeproj/*\"")

А если команда find не подходит, то вы можете использовать команду mdfind (например, выделение из командной строки) аналогичным образом.

...