2009-05-23 9 views
9

Devo creare un AppleSript che copi i file specificati da una cartella in una cartella appena creata.Copia di file di Applescript in una nuova cartella

Questi file devono essere specificati nel l'editor AppleScript così qualcosa di simile:

start 

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

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

end 

risposta

4

Il trucco con AppleScript è che i file in movimento avviene tramite alias.

Più realisticamente potrebbe essere più semplice creare uno script di shell che può essere eseguito da AppleScript utilizzando do shell script se si utilizza Automator o qualcosa di simile.

#!/bin/sh 

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

Il suo bene di utilizzare questo metodo su quelli AppleScript causare a volte si potrebbe avere problemi di autorizzazione e usare in questo modo aiuta quindi. –

+0

Gli svantaggi di questo sono: L'utente non vedrà una barra di avanzamento se la copia richiede più tempo. L'utente non può annullare, per lo stesso motivo. Supportare queste operazioni con un comando di shell sarà molto più difficile che lasciare che sia il Finder a farlo. Il lato negativo di Applescripting del Finder, però: se l'utente sceglie di utilizzare un'app di "Finder" sostitutiva, l'operazione di Applescript potrebbe non riuscire (non è sicuro, dipende probabilmente da quanto bene è stata scritta la sostituzione). –

+1

Un altro vantaggio per l'utilizzo del Finder: se l'elemento di destinazione esiste, all'utente verrà chiesto di sostituire o meno. –

9

generale:

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 

È possibile aggiungere i nomi delle variabili che rappresentano i file POSIX e percorsi.

Ovviamente il carattere dei due punti (:) è un carattere riservato per i nomi di cartelle e file.

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  

Si consiglia inoltre di aggiungere un controllo degli errori se la cartella di destinazione esiste già.

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

Questo funziona per la copia di un volume di rete montato:

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

Se si tratta di una sincronizzazione che stai cercando è possibile eseguire il seguente script di shell in 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

Ho usato la soluzione di script di shell di Chealions. Non dimenticare di rendere eseguibile il file di script con: sudo chmod u+x scriptFilename

Rimuovere anche lo spazio tra il segno = nelle assegnazioni di variabile. Non sarebbe lavorare con gli spazi, ad esempio: newFolderName="Test Folder 2"

0

Il modo più semplice per farlo è, come di seguito 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