- ベストアンサー
applescriptでファイルの比較
MacOS 9.2を使用しています。AppleScriptで2つのファイルを比較して差異があった場合にそれをテキストファイルに出力することはできますでしょうか?できるならその記述方法を教えてください。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
#1です。ちょっと比較・修正からはずれているのですがご容赦を。 これは私が常用している、ファイルのクリエータをあらかじめセットした一覧から選択して一括変更するスクリプトです。2行目が順にYooEdit、iCab、PictureViewer、SimpleTextのクリエータをセットしている行です。長いと思われるでしょうが、Macらしい挙動を求めるとこのくらいになってしまいます。 FinderPopを使われていますか?以下のスクリプトを「コンパイル済みスクリプト」で保存して、FinderPop項目フォルダーに入れると、Finderでファイルを複数選択後、そのままコンテクストメニューからスクリプトを実行できます。もちろん「アプリケーションで保存」でも大丈夫です。ドロップレットにするには先頭に「on open」、最終行に「end open」を挿入してからアプリケーションで保存します。 =====ここからコピー(この行は不要)===== set theFiles to {} set creatorList to {"YoED", "iCAB", "ogle", "ttxt"} tell application "Finder" repeat with aFIle in selection --セレクションの振り分けをする if (kind of aFIle ends with "画像") or (kind of aFIle ends with "書類") ツ or (kind of aFIle ends with "ファイル") or (kind of aFIle ends with "ピクチャ") then set end of theFiles to aFIle else display dialog name of aFIle & ツ "は処理できませんのでスキップします" buttons {"Skip"} default button 1 with icon stop giving up after 2 end if end repeat end tell if (count of theFiles) = 0 then display dialog "書類が選択されていませんので終了します" buttons {"Quit"} default button 1 with icon stop giving up after 2 return end if set aCreator to choose from list creatorList with prompt "Choose Creator" --クリエータ変換データの設定処理 tell application "Finder" try repeat with aFIle in theFiles --クリエータの変更処理 set creator type of aFIle to aCreator end repeat on error display dialog "作業をキャンセルしました" buttons {"OK"} default button 1 with icon note giving up after 2 (*リスト選択でキャンセルするとaCreatorにfalseがセットされる*) end try end tell =====ここまでコピー(この行は不要)===== ファイルのクリエータを調べるには、そのファイルを選択状態にして、以下のスクリプトをスクリプト編集プログラムから実行します。結果ウインドウにクリエータが表示されます。 =====ここからコピー(この行は不要)===== tell application "Finder" to get creator type of selection =====ここまでコピー(この行は不要)===== 同様にファイル名、修正日、作成日が得られるスクリプトです。 =====ここからコピー(この行は不要)===== tell application "Finder" to set theData to info for selection get {name, modification date, creation date} of theData =====ここまでコピー(この行は不要)===== 新しく質問を出してもらえれば目立つので、皆さんからレスがつきますよ。
その他の回答 (3)
- qntmphscs
- ベストアンサー率53% (14/26)
#1です。 >open for accessでファイルを開き、Read、Writeで読み書きします。 ファイルI/Oできるんですね。以後、気をつけます。 MacJPerlでやるなら、新規ファイルに以下のスクリプトをペーストして、Dropletで保存して下さい。名前は適当につけて下さい。このドロップレットにテキストファイルを2つドロップすると差分ファイルDiffResult.txtが新規作成されます。 このスクリプトはとりあえず差分を抽出するというレベルです。最低限のエラー処理と動作確認はしてありますが、念のためダミーファイルで試して下さい。 重要:DiffResult.txtと同名のファイルがあると上書きされてしまいます。 =====ここからコピー(この行は不要)===== #!/usr/local/bin/perl $i=0; while($file = shift @ARGV){ open IN, "<$file" or die; $i++; if ($i==1){ $name1=$file; while(<IN>){ chomp($_); push @doc1,$_; } }elsif($i==2){ $name2=$file; while(<IN>){ chomp($_); push @doc2,$_; } } close IN; } open OUT, ">DiffResult.txt" or die; MacPerl::SetFileInfo("YoED", "TEXT", "DiffResult.txt"); $j=@doc1; $k=@doc2; $j=$k if $j<$k ; $m=0; for($i=1;$i<=$j;$i++){ $m++; $s=shift @doc1; $t=shift @doc2; if($s ne $t){ $line1=$name1."(".$m."): ".$s; $line2=$name2.": ".$t; print OUT $line1."\n".$line2."\n"; } } close OUT; MacPerl::Quit(2);
お礼
ありがとうございます。使わせていただきます。
- coriaka
- ベストアンサー率72% (126/175)
単純なファイルの読み込み・書き込みだけならAppleScriptでもできます。 open for accessでファイルを開き、Read、Writeで読み書きします。 以下のURLに命令の書式が載っているので参考にしてください。 http://homepage1.nifty.com/ton_b/dic/OSAX/contents.html ただ、高度な操作を行うにはOSAXやアプリケーションの力を借りる方が楽でしょう。 テキストデータを扱うOSAXの1つにTanaka's OSAXがあります。 http://mtlab.ecn.fpu.ac.jp/tanaka_tool.html
お礼
回答ありがとうございます。それからいいサイトを教えていただいてありがとうございました。お気に入りにいれて勉強します。
- qntmphscs
- ベストアンサー率53% (14/26)
■テキストファイルの内容を行単位で比較して、その差分をテキストファイルに出力したいのであれば、AppleScript単体ではできません。 JeditやQuoEditのような、テキストデータをAppleScriptで操作できるエディタが別途必要です。なお、アプリごとにAppleScriptの構文が違うので、その修得も必要です。 QuoEditはFinderと同様にレコーダブルですから、とりあえず試用してみてはいかがでしょう。 AppleScriptにこだわらないならMacJperlが最適です。テキスト処理ならこちらの方が速いし、楽です。 もし、テキストファイルに出力しなくてもよいなら、フリーウエアのDODO Diffで差分をチェックできます。 ■ファイルの属性(修正日やサイズ等)を比較・変更したいのならFinderに指示するだけなのでかんたんです。でもテキストファイルに出力するためにはやはりスクリプト対応のエディタ等が必要です。
お礼
回答ありがとうございます。やはりAppleScriptではできないのですね。。自分でもいろいろ調べてみたのですが、情報がなくて困っていました。 ご指摘のとおりアプリを使うのは私にはちょっと困難そうですね。ここでまた質問するのはだめかもしれませんが、後学のため、最後に記載されているファイルの属性を比較するスクリプトをおしえていただけませんか?
お礼
丁寧にありがとうございました。Macの情報はネットにもあまり落ちていないので、助かりました。