「-」で始まるファイル

Mac(Mac OS X 10.4.10) のデスクトップを整理するためにファイル移動しようと思い
foo@Mac $ ls *.webloc
とやったら
ls: illegal option -- _
usage: ls [-ABCFGHLPRSTWZabcdefghiklmnopqrstuwx1] [file ...]

なとと怒られた。定期的にやってる事だったので何故そうなったのか意味が分からない。

kawaduに相談したら「マテマテ」と諭される。
相談しつつダブルクォートとかで囲む等やってみたが、期待する挙動はしてくれない。

ほかのファイルはどうなるかなと思い、
foo@Mac $ ls *.psd
とやると期待通りの表示をするので、webloc 拡張子を持つファイルがおかしいのかな?ってことで、おかしそうなファイルを探すと 「-」で始まるファイルがあった。これかと思い先頭の「-」を外すと期待通りの挙動をした…。

kawaduに激詰めされることになったことは言うまでもありませんが、他の OS ではどうかなと思い、試してみた。

~/-hoge.txt がいる状態で。
foo@Debian $ ls *.txt
ls: オプションが違います -- .
詳しくは `ls --help' を実行して下さい.

ふむ。

しかし後日よくよく考えた。これではどうかと。
foo@Mac $ ls ./*.webloc
結果。
./-hoge.webloc

debian では。

foo@Debian $ ls ./*.txt
./-hoge.txt

上手くいったよ…。
これで清々しくkawaduに激詰めすることが出来ます。

教訓
「-」で始まるファイルには気をつけよう。
てか ./ は基本的につけたほうが良さそう。

Photoshop で JavaScript

アイコンとか小さな画像を複数編集したいとき、アイコンごとのファイルで1つずつ編集するのなんて面倒。それが100個もあった場合には1つのファイルでまとめて作って書き出すときにバラバラにしたい。

かといって、100個のファイルを開いて100回ペーストするのも、それはそれで面倒と思うのはこれもまた人の世の常。
わがままですね。

そんなわがままな悩みを解決するには自動化すればいいのですが、どういう方法で自動化させるかが問題。
せっかくなので割と慣れてる JavaScript でやる方法をちょっとやってみた。

まずは取り込みたい画像のパスが書かれたファイルを作る。
一行一ファイルを絶対パスで書く。

Mac & Phososhop CS2 の場合だと、
/Users/hoge/Desktop/images/hoge0.png
/Users/hoge/Desktop/images/hoge1.png

以下続く
…な感じのファイルを用意します。

スクリプトは以下の感じでファイルリストのパスをこれも絶対パスで教えてあげて、ExtendScript Toolkit.app を使って実行。
Photoshop からだと「ファイル」>「スクリプト」>「参照…」で javascript のファイルを渡してあげるとできます。

preferences.rulerUnits = Units.PIXELS;
var docObj = activeDocument;
var margin = 10;
var iconsize = 16;
var span = iconsize + margin
var w = activeDocument.width.value;
var h = activeDocument.height.value;
var num_max_x = Math.floor(w/span);
var num_max_y = Math.floor(h/span);
var filename = "/path/to/filename.txt";
var fileObj = new File(filename);
var flag = fileObj.open("r");

if (flag) {
    var lineCount = 0;

    while (!fileObj.eof) {
        textln = new File(fileObj.readln());
        if (textln.exists) {
            open(textln);
            activeDocument.selection.selectAll();
            activeDocument.activeLayer.copy();
            activeDocument.close(SaveOptions.DONOTSAVECHANGES);
            docObj.paste();

            var x = lineCount%num_max_x;
            var y = Math.floor(lineCount/num_max_x);

            activeDocument.activeLayer.translate(
              span*x - Math.ceil(w/2) + iconsize/2 + margin,
              span*y - Math.ceil(h/2) + iconsize/2 + margin
            );

            var fileNameAry = String(textln).split("/");
            var fileName = fileNameAry[fileNameAry.length-1];
            activeDocument.artLayers[0].name = fileName;
            lineCount ++;
        }
    }
}
else{
    alert("ファイルが開けませんでした");
}

せっかくなので動画撮ってみました。
始まりがグレーなのは何故だか分からない。

初めての Broadcast Myself.