2009-05-23 10 views
9

Necesito crear un AppleSript que copie los archivos especificados de una carpeta a una carpeta recién creada.Applescript Copie el archivo a una nueva carpeta

Estos archivos deben especificarse en el editor de AppleScript así que algo como:

start 

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

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

end 

Respuesta

4

El truco con AppleScript es que los archivos que se mueven se hace uso de alias.

De manera más realista, podría ser más fácil hacer un script de shell en su lugar, que se puede ejecutar desde AppleScript utilizando do shell script si está utilizando Automator o algo similar.

#!/bin/sh 

fileToBeMoved = "~/Desktop/Test Folder 1/test.doc" 
newFolderName = "Test Folder 2" 
mkdir $newFolderName 
cp $fileToBeMoved $newFolderName 
+0

Es bueno utilizar este método sobre los AppleScript Porque a veces es posible que tenga problemas de permisos y usar de esta manera ayuda entonces. –

+0

Las desventajas de esto son: El usuario no verá una barra de progreso si la copia toma más tiempo. El usuario tampoco puede cancelar, por el mismo motivo. Respaldar estas operaciones con un comando de shell será mucho más difícil que simplemente dejar que Finder lo haga. Lo malo de Applescripting the Finder: si el usuario elige usar una aplicación de reemplazo "Finder", la operación de Applescript puede fallar (no estoy seguro de esto, probablemente depende de qué tan bien esté escrito el reemplazo). –

+1

Otra ventaja para usar Finder: si el elemento de destino existe, se le pedirá al usuario que lo reemplace o no. –

9

general:

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 

Puede añadir los nombres de variables que representan archivos POSIX y caminos.

Obviamente, el carácter de dos puntos (:) es un carácter reservado para los nombres de carpetas y archivos.

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  

Es posible que también desee agregar la comprobación de errores si la carpeta de destino ya existe.

3
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 
1

Esto funciona para copiar en un volumen de red montada:

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 
0

Si se trata de una sincronización que busca puede ejecutar el siguiente script en su AppleScript:

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

0
tell application "Finder" 
    make new folder at desktop with properties {name:"folder"} 
    duplicate POSIX file "/usr/share/doc/bash/bash.html" to result 
end tell 

POSIX file ((system attribute "HOME") & "/Documents" as text) 
tell application "Finder" to result 

tell application "Finder" to duplicate (get selection) to desktop replacing yes 

-- these are documented in the dictionary of System Events 
path to home folder 
POSIX path of (path to documents folder) 
path to library folder from user domain 
path to desktop folder as text 

-- getting files as alias list is faster 
tell application "Finder" 
    files of entire contents of (path to preferences folder) as alias list 
end tell 
0

He utilizado la solución Chealions shell script. No se olvide de hacer su archivo de comandos ejecutable con: sudo chmod u+x scriptFilename

también quitar el espacio entre el signo = en las asignaciones de variables. no iba a funcionar con los espacios, por ejemplo: newFolderName="Test Folder 2"

0

La forma más sencilla de hacerlo es la siguiente dice

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 
Cuestiones relacionadas