2013-08-20 2 views
0

У меня есть папка под названием «Каталог» с около 1000 подпапок. Каждая подпапка («Студент») содержит одну или несколько подпапок, которая имеет один или несколько файлов. Можно ли написать скрипт, который: имеетПеремещение и объединение папок в AppleScript

  • Обнаруживает ли вложенная один или более чем один подкаталог
  • Если «Student» имеет только один подкаталог, переместить его в новую папку под названием «Bad» в родительский каталог
  • Если «Student» имеет более чем одну вложенную папку, переместить его в новую папку под названием «Good» в родительском каталоге

Очевидно, что в результате, мне нужны две папки в «справочник» папка: одна называется «Плохая», которая содержит все папки, содержащие одну папку, а одна называется «Goo d ", который содержит все папки, содержащие более одной папки. Другими словами, я хочу таксономия идти от:

/Directory/Billy/Grades 
/Directory/Billy/Student_Info 
/Directory/Bob/Grades 
/Directory/Bob/Student_Info 
/Directory/Joe/Student_Info 
/Directory/George/Grades 

To:

/Directory/Good/Billy/Grades 
/Directory/Good/Billy/Student_Info 
/Directory/Good/Bob/Grades 
/Directory/Good/Bob/Student_Info 
/Directory/Bad/Joe/Student_Info 
/Directory/Bad/George/Grades 

ответ

3

Дайте это назад, он использует несколько основных Finder и AppleScripting идеи, которые вы можете использовать в будущем.

Сначала сделайте резервную копию своих данных на всякий случай.

tell application "Finder" 
    -- Define the full path to your data 
    set student_data_folder to folder POSIX file "/Users/Foo/Desktop/bar/students/data" 

    -- Get the student folders, ignoring good & bad incase they have already been created 
    set all_student_folders to every folder of student_data_folder whose name is not in {"Good", "Bad"} 

    --Create the good & bad folders if they don't exist 
    set good_folder to my checkFolderExists("Good", student_data_folder) 
    set bad_folder to my checkFolderExists("Bad", student_data_folder) 

    -- Now loop through all student folders doing the sort based on how many subfolders they have 
    repeat with student_folder in all_student_folders 
     if (get the (count of folders in student_folder) > 1) then 
      -- Its good 
      move student_folder to good_folder 
     else 
      -- It's bad 
      move student_folder to bad_folder 
     end if 
    end repeat 

end tell 

on checkFolderExists(fname, host_folder) 
    tell application "Finder" 
     if not (exists folder fname of host_folder) then 
      return make new folder at host_folder with properties {name:fname} 
     else 
      return folder fname of host_folder 
     end if 
    end tell 
end checkFolderExists 

НТН

+0

Зачем использовать POSIX вместо псевдонимы? – scohe001

+2

@ Josh, только потому, что вопрос, используемый POSIX и я хотел пойти с тем, что уже знал айзер. Также пути HFS - это немного старая школа и менее читаемая для более широкой базы данных xplat и веб-пользователей. – adamh

+0

На самом деле я понятия не имел, что Applescript принимает POSIX для своих собственных функций. Я всегда конвертировал все в POSIX, меняя его по мере необходимости, а затем возвращаюсь в HFS, когда мне нужно его использовать. Приятно знать всю эту беду. +1 за хороший ответ – scohe001

Смежные вопросы