UNIX 的ファイル整頓術

はじめに

同僚から大量に文書ファイルをもらうことがある。とてもありがたいが、自分のファイル管理法と違っていて戸惑ってしまうことがある。特殊文字を使ったディレクトリ名やファイル名、不統一な文字コードや改行コード、MS Word や一太郎など特定のソフトで作成されたドキュメント、異なった階層に置かれている重複したファイルなどなど。しかし、もらっている立場としては文句は言えない。以下ではこのようなファイル群を Unix-like な環境で少しだけ使いやすいように整頓する方法をメモしておく。

# 以下の作業の実行前にはバックアップ必須です!また、記事名ほど大したことは書いてません...

Word ドキュメント

カレントディレクトリ以下すべての Word ドキュメント (.doc) をテキストファイル (.txt) に変換する。変換には wvWare を用いる。

#!/bin/bash

for f in $(find . -name '*.doc'); do
    echo $f
    wvText $f ${f%.doc}.txt
done

文字コード

カレントディレクトリ以下すべてのテキストファイル (.txt) を UTF-8 (改行コード LF) に変換する。定番の nkf で。

$ find . -name '*.txt' -print0 | xargs -0 nkf -wLu --overwrite

重複ファイル

重複ファイルを削除するには fdupes を利用することができる。

#!/bin/bash

fdupes -rf . | tee duplicates.txt

IFS=$'n'
for x in `cat duplicates.txt`; do trash-put $x; done

カレントディレクトリ以下すべての重複するファイルを duplicates.txt に書き出し、ゴミ箱へ移動させている。ゴミ箱移動は trash-cli を使用している。duplicates.txt を確認してもしも必要なファイルがあったならば、restore-trash で選択したファイルを元に戻す。

検索

以上の簡単な操作だけでも大分すっきりして、ファイル検索もかけやすくなる。

Emacs から日本語を含む語句の再帰的な検索を行うには grep-find コマンドを以下のように設定すればよい。日本語対応ページャ LV に付属する lgrep コマンドを使用している。

(setq grep-find-command "find . ! -name '*~' -type f -print0 | xargs -0 lgrep -n -Au8 -Ia ")

相当量のファイルを含むディレクトリに対しては予めインデックスを作成しておけば素早く検索結果を得ることができる。全文検索システム Hyper Estraier は開発はストップしているものの、高機能であり、なおかつ手軽に導入できる (導入は Hyper Estraier で仏典探索 を参照)。Lookup + media を利用すれば Emacs 内で Hyper Estraier のインデックスに対して検索をかけることもできる (cf. ndest agent)。

どうでもいいことですが…

今回この記事を書こうと思ったきっかけは、友人からもらった「浄土真宗関連」のデータだった。「浄土真宗関連」とは文字通り親鸞や清沢満之の著作など浄土真宗に関連するデータである。およそ Unix とはかけ離れているように感じられるかもしれないが、今や仏教学や真宗学の分野においても、パソコン活用は必須である。八万四千の経典もモバイルパソコンにデータとして収まり携帯できる時代である。そのうちデータとしてスキャンしたり、App Store などで購入したお経本を iPad に入れて読経する僧侶も姿もめずらしくなくなるかもしれない。いや真面目な話。

(Hyper Estraier に含まれる estseek.cgi を用いてローカルで全文検索している様子)

(Emacs の lookup からも Hyper Estraier の索引は検索できる)

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s