Hatena::ブログ(Diary)

名もないテクノ手 このページをアンテナに追加 RSSフィード Twitter

EPUB版『InDesign者のための正規表現入門』

InDesignのTips一覧

2011-11-07

[][][]ネットからダウンロードしたファイルをドラッグ&ドロップして、アラートを出ないようにする。

Snow Leopardの頃はあまり気にならなかったんですが、Mac OS X Lion(10.7.2)にしてから、ネットからダウンロードしたファイルを開く時のチェックがかなり厳しくなったようです。これね:

f:id:seuzo:20111107002626p:image

ひとつかふたつならなんてことないんですが、FTPなどからダウンロードしたファイルが100も200もあると正直うんざりしますな...

ってことでAppleScriptのドロップレットを書いてみました。フォルダ内のファイルも再帰的に処理します。

(追記:2011-11-11T15:52:29+0900)内部的にxattr -r オプションを使って、entire contentsをやめるようにしました。

(*
remove_download_EA
ネットからダウンロードしたファイルを開く時の警告表示を出ないようにするドロップレット

for Mac OS X 10.7.2

2011-11-07	ver0.1	とりあえず
2011-11-11	ver0.2	xattr -r オプションを使って、entire contentsをやめた

(c)2011 seuzo
*)

--ファイル名の警告
to violation_name(file_path)
	set file_path to quoted form of ((POSIX path of file_path) as Unicode text) --まずPOSIX pathにする
	set file_path_test to do shell script "echo " & file_path & " | perl -pe 's/[\\/\\.0-9A-Za-z _-]+//;'"
	if (file_path_test is not "") then
		display dialog file_path & " のファイル名には英数字以外の文字が使われています。" & return & "実行時にトラブルになるかもしれません。続行しますか?" buttons {"Cancel", "続行"} default button 1 with icon 1 --キャンセルで終了
	end if
end violation_name

--リストの結合
to as_join(thedelimit, theList)
	set oldDelim to AppleScript's text item delimiters
	set AppleScript's text item delimiters to thedelimit
	set tmpstr to theList as text
	set AppleScript's text item delimiters to oldDelim
	return tmpstr
end as_join


--ドラッグ&ドロップで実行
on open of my_files
	set target_path to {}
	
	tell application "Finder"
		repeat with i in my_files
			set aFile to i as alias
			my violation_name(aFile) --ファイル名の警告
			set end of target_path to quoted form of (POSIX path of aFile)
		end repeat
		set target_path to my as_join(" ", target_path)
		
		
		try
			set my_script to "xattr -rd com.apple.quarantine " & target_path
			--display dialog my_script
			set ans to do shell script my_script
			--display dialog ans
		on error errMsg number errNo
			--エラーがあっても無視する
			--display dialog "実行エラーです" & return & errMsg & return & errNo buttons {"Cancel"} default button 1 with icon 1 --キャンセルで終了
		end try
	end tell
end open

アプリケーション形式でダウンロードしたい人はこちら:remove_download_EA.app.zip 直

問題:ファイルをドラッグ&ドロップした時、1回だけ警告が出ます。フォルダごとドラッグ&ドロップすれば警告は出ません。

問題:すでにcom.apple.quarantine属性が外れているファイルを、未処理のファイルと一緒に選択してドラッグ&ドロップしても、未処理ファイル分を処理しません。ASのバグっぽいので、修正できないかも。フォルダごとドラッグ&ドロップすれば、すべてのファイルを処理します。


参照

ネットからダウンロードしたファイルを開く時の警告表示を消す方法 - 強火で進め

【コラム】OS X ハッキング! (253) Leopard解体新書(4) 〜拡張された拡張属性〜 | パソコン | マイコミジャーナル

Macでlsした時のパーミッションにあるアットマークを消す。xattrコマンド。 - kanonjiの日記

ダウンロードしてきたファイルを初めて開く時の警告ダイアログを表示させないようにする | Macの手書き説明書

seuzoseuzo 2011/11/07 14:44 [http://d.hatena.ne.jp/nakamura001/20101229/1293617029:title=ネットからダウンロードしたファイルを開く時の警告表示を消す方法 - 強火で進め] さんでご紹介いただいているシェルスクリプトは正しく動くようですが、Automatorにするとエラーになっちゃうんです。
指定されたファイルには「com.apple.quarantine」なんてattr_nameはないですよと言われちゃいます。ドラッグ&ドロップすることで、「com.apple.quarantine」がなくなってしまうみたい。

seuzoseuzo 2011/11/07 17:10 Finderのentire contents を使わなくても、xattr -rオプションで再帰的に処理できるかも...

seuzoseuzo 2011/11/07 17:15 >問題:すでにcom.apple.quarantine属性が外れているファイルを、未処理のファイルと一緒に選択してドラッグ&ドロップしても、未処理ファイル分を処理しません。ASのバグっぽいので、修正できないかも。

on open of my_files
display dialog ((length of my_files) as text) & "個のファイルをドラッグ&ドロップしました"
tell application "Finder"
repeat with i in my_files
display dialog quoted form of (POSIX path of (i as alias))
end repeat
end tell
end open

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/seuzo/20111107/1320644425