Applescript Копировать файл в новую папку

Мне нужно создать AppleSript, который будет копировать указанные файлы из одной папки во вновь созданную папку.

Эти файлы необходимо указать в редакторе AppleScript, например:

start

fileToBeMoved = "Desktop/Test Folder 1/test.doc"
newfoldername = "Test Folder 2"

make newfolder and name it 'newfoldername'
copy 'fileToBeMoved' to 'newfolder'

end

person Community    schedule 23.05.2009    source источник


Ответы (6)


В целом:

tell application "Finder"
  make new folder at alias "Macintosh HD:Users:user:Desktop:" with properties {name:"Test Folder 2"}
  copy file "Macintosh HD:Users:user:Desktop:Test Folder 1:test.doc" to folder "Macintosh HD:Users:user:Desktop:Test Folder 2"
end tell

Вы можете добавить имена переменных, которые представляют файлы и пути POSIX.

Очевидно, что символ двоеточия (:) является зарезервированным символом для имен папок и файлов.

set desktopFolder to "Macintosh HD/Users/user/Desktop/"
set desktopFdrPosix to quoted form of POSIX path of desktopFolder
set newFolderName to "Test Folder 2"
set destinationFdrPosix to quoted form of desktopFdrPosix & POSIX file newFolderName
set sourceFilename to "Test Folder 1/test.doc"
set sourceFnPosix to quoted form of desktopFdrPosix & POSIX file sourceFilename

tell application "Finder"
  make new folder at alias desktopFdrPosix with properties {name:newFolderName}
  copy file sourceFnPosix to folder destinationFdrPosix
end tell    

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

person Alex Reynolds    schedule 26.05.2009
comment
Что мне нужно изменить, чтобы скопировать в папку на подключенном файловом ресурсе SMB? У меня есть папка Movies на общем ресурсе, смонтированная в /Volumes/Video. Я попытался создать quoted form of POSIX path для Video, Video/Movies, /Volumes/Video и /Volumes/Video/Movies для обоих copy file и duplicate file с to folder или to disk. Ни один из них не работал. Все выдают ошибку: execution error: Finder got an error: Can't set folder (или disk) "'/Volumes/Video/Movies'" to file "'/Users/me/path/to/file.m4v'". (-10006) - person nekno; 22.03.2018

Хитрость AppleScript заключается в том, что перемещение файлов выполняется с использованием псевдонимов.

Более реально было бы проще создать сценарий оболочки, который можно запускать из AppleScript с помощью do shell script, если вы используете Automator или что-то подобное.

#!/bin/sh

fileToBeMoved="$HOME/Desktop/Test Folder 1/test.doc"
newFolderName="Test Folder 2"
mkdir "$newFolderName"
cp -a "$fileToBeMoved" "$newFolderName"
person Chealion    schedule 26.05.2009
comment
Хорошо использовать этот метод вместо методов applescript, потому что иногда у вас могут быть проблемы с разрешениями, и тогда использование этого способа помогает. - person aayush sharma; 05.01.2012
comment
Недостатки этого: Пользователь не увидит индикатор выполнения, если копирование займет больше времени. Пользователь также не может отменить подписку по той же причине. Поддерживать эти операции с помощью команды оболочки будет намного сложнее, чем просто позволить Finder сделать это. Тем не менее, недостаток Applescripting Finder: если пользователь решит использовать заменяющее приложение Finder, операция Applescript может завершиться ошибкой (не уверен в этом, вероятно, зависит от того, насколько хорошо написана замена). - person Thomas Tempelmann; 03.05.2012
comment
Еще один плюс использования Finder: если целевой элемент существует, пользователю будет предложено заменить его или нет. - person Thomas Tempelmann; 03.05.2012

Это работает для копирования на смонтированный сетевой том:

    mount volume "afp://compname.local/mountpoint"
    tell application "Finder"
      duplicate file "MyTextFile.txt" of folder "Documents" of home to disk "mountpoint"
      eject "mountpoint"
    end tell
person Wilersh    schedule 19.05.2011

Простой способ сделать это, как показано ниже

set home_path to path to home folder as string
set work_folder to alias (home_path & "AutomationAppleScript:ScreenShots:")
tell application "Finder"
    duplicate every file of work_folder to folder "Archive" of home
end tell
person Michael Sanders    schedule 28.03.2014

Я использовал решение сценария оболочки Chealions. Не забудьте сделать исполняемый файл скрипта с помощью: sudo chmod u+x scriptFilename

Также удалите пробел между знаком = в назначениях переменных. Не будет работать с пробелами, например: newFolderName="Test Folder 2"

person Midverse Engineer    schedule 15.01.2014

Если вам нужна синхронизация, вы можете запустить следующий сценарий оболочки в своем AppleScript:

rsync -a /Users/username/folderToBeCopiedFrom /Volumes/folderToBeCopiedTo/

person SashaZd    schedule 22.03.2013