「Cygwin」カテゴリ内の記事 このカテゴリをはてなブックマークに追加 このカテゴリを含むはてなブックマーク (初公開日順)

2012年2月 9日 (木)

cp_with_prefix.pl: ディレクトリ平坦化機能付きコピー

ハードのメディアプレイヤーで画像をランダムに閲覧したい。私が持っているメディアプレイヤーに限らず専用ハードのものはたいていそうだが、PC などのソフトではあった、zip にまとめられたものを見るようなことはできず、また、ディレクトリの構造を奥へ奥へと "recursive" に辿って見るような機能もない。フォルダ内のランダム再生はある。

そこでディレクトリ構造を平坦化(flattening)してコピーするような Perl スクリプトを書いた。

はじめはソースと同じファイル名(ベース名)で一つのディレクトリにコピーしたとき重複を避けるため、手動で接頭辞(prefix)を付けられるようにすれば十分かと考えたが、使うと面倒くさいので、-F オプションによって、ファイル名にディレクトリが含まれているとき、そのディレクトリ名を prefix とする機能も作った。

例えば、

$ perl cp_with_prefix.pl --prefix=p_ a/b/c.jpg d


…としたときは、d/p_c.jpg というファイルができる。

$ perl cp_with_prefix.pl -F a/b/c.jpg d


…としたときは d/a_b_c.jpg というファイルができる。

Cygwin の mv や cp の実装を参考に、xargs といっしょに使いやすいよう -t (ターゲットディレクトリ)オプションを用意した。

例えば次のように使う。

$ find dir1 dir2 -name '*' -print0 | xargs -0 perl cp_with_prefix.pl -F -t dir3


こうすると、dir1 や dir2 の下にあるファイルがリカーシブに dir3 の下にファイル名の重複が(ほぼ)なくなるようにコピーされる。

なお、私の最初に書いた目的にそった上で高速化するため、同じファイル名があったときはコピーせずスキップする。ちゃんと上書き(overwrite)して欲しいときは -f (force)オプションを付ければよい。スキップしている表示がうっとうしいなら、-q (quiet)オプションを付ければよい。目的がただの rename に近いため、コピーしたあとの日付けはソースと変わらないようにしている。

ファイル名とコンソールの文字エンコーディングについては、ソースの以下の部分をいじって欲しい。本当は、ロケールとかを使ってコーディングできれば美しいのだが、これまでの私の経験から言うと、オプションで指定してもらうか、今回のようにスクリプトをいじってもらったほうが話が早い。現在、 Cygwin の 1.7 系列の場合、ファイルシステムのエンコーディングが cp932 (Windows 用の Shift JIS コード)であっても、utf8 で処理される。昔の Cygwin であれば、utf8 の部分を、ファイル名では cp932 にコンソールでは euc-jp にすると、うまくいくかもしれない。

our $FILENAME_ENCODER = Encode::find_encoding('utf8') or die;
our $CONSOLE_ENCODER = Encode::find_encoding('utf8') or die;



配布物


これは、とても簡単なプログラムなので、数式のようにパブリックドメインなものとして扱っていただいてよい。こんなプログラマなら誰でも作れそうなものをプログラムできる人しか使えないであろう Perl スクリプトで公開する意義はないかもしれないが、こんな簡単な機能がググっても見つからないのも変なので公開することにした。

関連


スクリプト自体はパッと見つからないが、シェルで同じような機能を求めてる人はいそうだった。Windows なら高機能なリネームソフトはいろいろある。 iTunes とかもそういう機能がありそうだが、このような機能だけが欲しくて使っているとかありうるんだろうか?

Flexible Renamer》。Windows 用のリネームソフトの例。
更新: 2012-02-09,2012-02-11
初公開: 2012年02月09日 22:26:18
最新版: 2012年02月11日 19:10:51

2012-02-09 22:26:15 (JST) in Cygwin, JRF 作成ソフトウェア, Perl | | コメント (2) | トラックバック (0)

2010年4月 8日 (木)

間違った MIME Type の text/x-server-parsed-html を Firefox で読みたい

知人のかなり旧いホームページは、HTTP ヘッダの Content-Type に text/x-server-parsed-html が帰ってくるが、これは .htaccess 等の間違いとされるものらしく、Firefox も IE6 も HTML として処理してくれない。最初、Firefox のユーザー設定ファイルである mimeTypes.rdf をいじって個人的な解決を図ったが、調べるうちにどうも不可能であることがわかった。そこで、次善の策として、外部プログラムに URL を渡し、そこで適当な処理をほどこしてから、Firefox に戻して表示させることにした。

続きを読む "間違った MIME Type の text/x-server-parsed-html を Firefox で読みたい"

2010-04-08 23:19:50 (JST) in Cygwin, Firefox, Perl | | コメント (2) | トラックバック (0)

2010年3月15日 (月)

Cygwin 上で dvdauhor を使い、字幕付き DVD を作る

90 年代に中古で買った LaserDisc プレイヤーの挙動が、「今になって」といおうか「さすがに」といおうか、とにかくおかしくなったので、今のうちに LD を DVD-R にバックアップしようとした。ある LD について、ついでに字幕も付けてみようかと思ったが、キャプチャ付属のオーサリングソフトでは、字幕を付けることができなった。Windows のフリーのソフトは使いにくく、市販のソフトも、字幕を付けられるようなものは高い。

しかも、Windows のフリーのソフトは、Cygwin のコマンドを用いているが、そういう場合の常として、すでに Cygwin のある私の環境では、新旧ライブラリが混同されるらしくうまく動かない。

でも、Cygwin でできるということはマニアックなこともできるだろうし、かねて、DVD で認証みたいなことができないものかと思っていたので、その実験も兼ねて、Unix 伝統のコマンドラインで、オーサリングを行う dvdauthor 等を使ってみた。

結果、メニュー等を市販ハードで見ると汚ないという不満があるものの、目的としたような仕様の字幕付き DVD を作ることができた。本稿は(主に、方法を忘れるであろう自分の)後学のために、その経験をまとめたものである。 Cygwin 以外、Linux などで使う場合にも参考にできるだろう。


本稿では、字幕付き DVD の作り方を一連に紹介したあと、実験的・応用的利用法について簡単に述べる。

作業の流れ

1.
LaserDisc のキャプチャ等、素材を用意する。
2.
キャプチャした MPEG-2 ファイルを DVD 用に(少し)変換する。
3.
字幕を付ける。
4.
メニューを作る。
5.
DVD イメージを作る。(完成)

続きを読む "Cygwin 上で dvdauhor を使い、字幕付き DVD を作る"

2010-03-15 23:56:09 (JST) in Cygwin, ハード | | コメント (1) | トラックバック (1)

2006年3月 4日 (土)

Navi2ch でインラインに画像を表示する (Referer もつける)

最近の Emacs は画像をインラインに表示できるが、Navi2ch そのものは掲示板の画像をインラインで見ることができない。しかし、《2chログ:Navi2ch for Emacs (Part 11)》の 888 の記事にインライン表示をする elisp とそれ用のシェルスクリプトが書いてあった。

それを Meadow と Cygwin の bash を使って走らせることにする。Cygwin の ImageMagickも使えるようにしておかねばならない。

続きを読む "Navi2ch でインラインに画像を表示する (Referer もつける)"

2006-03-04 06:44:26 (JST) in Cygwin, Emacs/Meadow | | コメント (2) | トラックバック (0)

2006年2月21日 (火)

lwp-request で https を使うと Segmentation Fault する。

現在、Cygwin の setup でインストールされる openssl-0.9.8a を使うと、 Crypt::SSLeay が make test で失敗します。openssl-0.9.8-2 などにすれば大丈夫なはずです。

'lwp-request -m GET https://...'が失敗するのも同じ理由と思われます。 Crypt::SSLeay が対応するまで openssl-0.9.8a を使わないようにするのが今のところの対処法のようです。

更新: 06/02/16,06/02/21
初公開: 2006年02月17日 13:18:10

2006-02-21 04:15:15 (JST) in Cygwin, Perl | | コメント (0) | トラックバック (2)

2006年2月16日 (木)

Ghostscript で -dSAFER にすると日本語が使えない

gs で -dSAFER にすると、日本語関係でエラーが出る。これは FONTPATH が通っていないところは、読まないことになっているからで、例えば次のようにすると解決する。

export GS_FONTPATH=/cygdrive/c/WINDOWS/fonts 
更新: 05/04/25
初公開: 2006年02月16日 04:45:38

2006-02-16 04:46:59 (JST) in Cygwin, TeX | | コメント (0) | トラックバック (0)

XML や XHTML のチェックに xmllint --valid を使う

libxml2 付属の xmllint を使って XML や XHTML のチェックをしようとすると、default ではいちいち dtd をリモートに読みに行ってしまう。そこで、 /etc/xml/catalog を作りローカルのファイルから dtd を読むようにした。 catalog に指定があると /etc/xml 以下のファイルなども読ませることができる。

まず、次から取ってきた DTD を /etc/xml/xhtml1-strict.dtd などとして置く。

>
XHTML 1.0のDTD http://www.w3.org/TR/2002/REC-xhtml1-20020801/#dtds
entity sets(*.entファイル)も必要です。


次のように catalog を設定した。

<?xml version="1.0"?>
<!DOCTYPE catalog PUBLIC "-//OASIS//DTD Entity Resolution XML Catalog V1.0//EN" "http://www.oasis-open.org/committees/entity/release/1.0/catalog.dtd">
<catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog">
  <public publicId="-//W3C//DTD XHTML 1.1//EN" uri="/etc/xml/xhtml11-flat.dtd"/>
  <public publicId="-//W3C//DTD XHTML 1.0 Strict//EN"
    uri="xhtml1-strict.dtd"/>
  <public publicId="-//W3C//DTD XHTML 1.0 Transitional//EN"
    uri="xhtml1-transitional.dtd"/>
  <public publicId="-//W3C//DTD XHTML 1.0 Frameset//EN"
    uri="xhtml1-frameset.dtd"/>
</catalog>


上は、ほとんど下記「参考」より引用しただけ。

ちなみに次のような alias があると便利かも。

alias xmlvalid='xmllint --noout --valid'


更新: 06/01/16,06/01/28,06/02/16,06/02/27
初公開: 2006年02月16日 03:37:15
最新版: 2006年02月27日 22:08:53

2006-02-16 03:44:13 (JST) in Cygwin, HTML/XML/CSS | | コメント (0) | トラックバック (0)