2017-08-18 5 views
0

Ich versuche, eine App zu erstellen, um Dateien mit einem bestimmten Namen einen anderen Ordner zu übertragen. Bisher habe ich folgendes:Suchen Sie eine Datei irgendwo auf der Festplatte und übertragen Sie sie in einen anderen Ordner

tell application "Finder" 
move (every item of (get path to home folder) whose name is "extended image name.jpg") to ((get path to home folder) & "Pictures" as string) 
end tell 

Während dies keine Fehler zurückgibt, ist es nicht tun, was ich es entweder wollen. Ich bin mir auch bewusst, dass dies nur den Home-Ordner durchsucht, also wenn es eine Möglichkeit gibt, eine breitere Suche nach dem ganzen Laufwerk durchzuführen, ohne einen Benutzernamen eingeben zu müssen, wäre das großartig (ich möchte das auf mehr Computern ausführen können) als eine ohne dass sie das Skript bearbeiten.)

-Danke

+0

Dies beantwortet Ihre Frage nicht, aber diese Zeile von _code_ kann geschrieben werden als: 'move (jedes Element von (Pfad zum Home-Ordner) who name ist "extended image name.jpg") zum pfad zum bilderordner " – user3439894

+0

@ user3439894 even' (pfad zum homeordner) 'kann durch' home' ersetzt werden – vadian

Antwort

1

der Code nur Dateien im Home-Ordner, aber nicht in dessen Unterordner betrachtet, alle Unterordner betrachten Sie entire contents

tell application "Finder" 
    move (every item of entire contents of home whose name is "extended image name.jpg") to folder "Pictures" of home 
end tell 
hinzufügen müssen

Aber bedenken Sie, dass entire contents extrem langsam ist. Der Shell-Befehl find oder eine Spotlight-Suche mit mdfind ist viel schneller zum Beispiel

set homeFolder to POSIX path of (path to home folder) 
set picturesFolder to POSIX path of (path to pictures folder) 
do shell script "mdfind -onlyin " & quoted form of homeFolder & " -0 'kMDItemDisplayName = \"extended image name.jpg\"' | xargs -0 -J {} mv {} " & quoted form of picturesFolder 

Wichtiger Hinweis:

Wie Sie die Finder-Version mehr Dateien mit dem gleichen Namen zu bewegen sind, wird fragt zum Überschreiben und die Die Shell-Version überschreibt alle Dateien mit demselben Namen.

+0

Super! Das hat perfekt funktioniert. Ich habe gerade den Home Folder auf Startdiskette und mv (move) in cp (copy) geändert. -Vielen Dank –

0

Wenn Sie den Finder verwenden, um zu suchen, wenn Ihr Ordner nur einige hundert Dateien enthält, ist das OK. Wenn Sie jedoch in einem Ordner mit Tausenden von Dateien suchen möchten, dauert der Finder zu lange. In diesem Fall ist es besser, den Shell-Befehl 'find' zu verwenden, der viel schneller ist.

Syntax des Befehls find ist: Verzeichnis/-name target_file_name

Noch mehr finden, können Sie Kette, die mit -exec fonction Befehl, das Ergebnis des Fundes verwendet wird, etwas zu tun: in Ihren Akten gefunden kopieren im Bilderordner.

In -exec Befehl das {} bedeutet die Datei gefunden. Der Befehl shell copy lautet cp.

Das endet mit: find/Users/myUserName/-name 'extended image name.jpg' -exec cp {} \;

(Anmerkung: die \, sagt dem System, das das Ende des exec-Befehl ist)

Insgesamt können Sie diesen Befehl in Applescript laufen über do Shell-Skript:

set Source to POSIX path of (path to home folder) 
set Dest to POSIX path of (path to pictures folder) 
set TargetName to "extended image name.jpg" 
set BackSlash to ASCII character 92 
set SemiCol to ASCII character 59 

try 
    do shell script "find " & Source & " -name " & quoted form of TargetName & " -exec cp {} " & Dest & " " & BackSlash & SemiCol 
end try 

Es ist viel mehr als Finder-Syntax, sondern auch viel schneller zu laufen!

Anmerkungen:

1) der POSIX Pfad wandeln den Finder Pfad mit: Pfad Schale mit/

2) die Aufkantung und SemiCol eingestellt \ und; . Dies ist ein Workaround um zu vermeiden, dass der Applescript-Compiler das \ während der Kompilierung falsch interpretiert.

3) Das Skript do shell befindet sich in try/end try Block, um Fehler zu vermeiden."Find" gibt Fehler, wenn Sie versuchen, auf Dateien ohne Erlaubnis zuzugreifen. Solche Fehler werden ignoriert.

4) Mit dieser Methode können Sie Source durch "/" ersetzen. Dabei sucht der Fund in allen Verzeichnissen des Hauptlaufwerks (es kann einige Zeit dauern!). Wenn Sie nach allen Benutzern suchen möchten, setzen Sie Source auf "/ Users /"

Verwandte Themen