2017-08-18 13 views
0

特定の名前のファイルを別のフォルダに転送するアプリを作成しようとしています。ハードドライブ上の任意の場所にファイルを配置し、別のフォルダに転送

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 

これはすべてのエラーを返しませんが、それは私はどちらかにそれをやりたいしません。これまでのところ、私は次のよう持っています。また、これはホームフォルダのみを検索することも知っているので、ユーザー名を入力しなくてもドライブ全体をより広範に検索する方法があれば、それは素晴らしいことです(これをもっと多くのコンピュータで実行できるようにしたい彼らはスクリプトを編集することなく、1より。)

-Thanks

+0

これはあなたの質問には答えませんが、_code_の行は 'move(画像フォルダへのパスに ' – user3439894

+0

@ user3439894'(ホームフォルダへのパス) 'も' home'に置き換えることができます – vadian

答えて

1

コードが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 
を追加し、あなたが持っているすべてのサブフォルダを考慮することが、そのサブフォルダにホームフォルダ内のファイルのみを考慮しなく

ただし、entire contentsは非常に遅いことに注意してください。シェルコマンドfindまたはmdfindとSpotlight検索は、例えばはるかに高速です

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 

重要な注意:あなたは、同じ名前を持つ複数のファイルを移動すると

ファインダーのバージョンは上書きをお願いしますシェルのバージョンはすべてのファイルを同じ名前で上書きします。

+0

素晴らしい!それは完璧に働いた。ホームフォルダを起動ディスクに変更し、mv(移動)をcp(コピー)に変更しました。 - ありがとう –

0

検索にFinderを使用すると、フォルダに数百のファイルしか含まれていない場合でもOKです。しかし、何千ものファイルを含むフォルダを検索したい場合、Finderは時間がかかります。この場合、はるかに高速なシェルコマンド 'find'を使用する方が良いでしょう。

コマンドを見つけるの構文は次のとおりです。あなたのケースで見つかったファイルをコピーする:あなたが何かを検索した結果を使用します-exec fonctionでコマンドチェーンをすることができ、さらにディレクトリ/ -name target_file_name

を見つけますピクチャフォルダにあります。

-execコマンドでは、{}は見つかったファイルを意味します。シェルコピーコマンドはcpです。

これで終わる:find/Users/myUserName/-name '拡張イメージ名.jpg' -exec cp {} \;

:;:

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 

はそれがはるかに長いです

は全体的に、あなたがAppleScriptを経由してシェルスクリプトを実行するには、このコマンドを実行することができます(注\は-execコマンドの終わりのシステムに指示します) Finderの構文より優れていますが、実行するのがはるかに高速です!

1)POSIXパスが有するファインダーパスを変換:/

2とシェルのパスに)バックスラッシュとSemiColが\とするように設定されています。 。これはApplescriptコンパイラがコンパイル中に\を誤って解釈するのを回避するための回避策です。

3)doシェルスクリプトはエラーを回避するためにtry/end tryブロックにあります。許可されていないファイルにアクセスしようとすると、「検索」のエラーが発生します。このようなエラーは無視されます。

4)この方法では、ソースを「/」で置き換えることができます。そうすることで、findはメインドライブのすべてのディレクトリを検索します(時間がかかることがあります)。すべてのユーザーを検索する場合は、ソースを「/ Users /」に設定してください。

関連する問題