2012-04-16

カレント・ディレクトリー内の全てのファイルを新しい下位ディレクトリーに簡単に移動させる 〜 dot dir を使って

ファイルが多くなったので、ディレクトリーを作ってまとめちゃう。そんなことは良くある。そのやり方が目から鱗な方法が紹介されていたので、コピペ。

$ ls
a.txt b.txt c.txt
$ mkdir .dir
$ mv * .dir
$ mv .dir dir

dir は適当なディレクトリー名をお付け下さい。

このやり方で何が目から鱗って、下から二行目のコマンド「mv * .dir」。カレント・ディレクトリーの全てのファイルを * で表しているわけだけど、それだと移動先であるディレクトリーも含まれてしまう。自分自身を自分の中に移動は出来ないのでエラーが出る。そこで、移動先のディレクトリーだけ排除して mv コマンドを実行したい。ここで、* (アスタリスク) が dot dir を含めないことを利用した。

一般に UNIX では、「.」で始まるファイル/ディレクトリーは隠しファイル/ディレクトリーになる。予め隠しディレクトリー「.dir」を mkdir で使っておき、mv コマンドで * (全てのファイル) をその .dir へ移動させる。.dir は隠しディレクトリーだから、「*」には含まれない。つまり、難しいことを考えなくても良い!!

作業が終わったら、隠しディレクトリーを適切なディレクトリー名に変更する。ちょっと手間だけど、難しいことを覚えてたり、ひねった作業をするよりスマートで簡便。急がば回れ的に便利なやり方。感動。

蛇足

ぼくは、この手の作業をする時、一つ上の階層にディレクトリーを作っていた。

$ mkdir ../dir
$ mv * ../dir
$ mv ../dir ./

この方法の欠点は二つ。一つは、一つ上に同じ名前のディレクトリーがあると mkdir の時にエラーになる。かと言って、確認するのも面倒。もう一つは、上のディレクトリーのパーミッションがない場合がある。特に管理者関係の作業をしていると、パーミッション問題にひっかかる。今回知った方法は、これら二つの欠点を全く見事にクリアーしている。いいね。

No comments:

Post a Comment