2012-04-23

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

の続き。rsync コマンドを使って同作業を行なうやり方がブログに紹介されていたのでメモメモ。rsync というと、ファイル同期用のコマンドで有名。そのコマンドを使って、強引にファイル移動させてしまう所に、このやり方の面白さがある。後で記すが、欠点もある。一つお楽しみということで、ご一読を。

いきなり、実行例から。

$ ls
a.txt b.txt c.txt img/
$ rsync -a --remove-source-files * dir
$ ls
dir/ img/

オプションの説明。-a オプションは --archive のショート・バージョン。再帰的なディレクトリー対応、オリジナル・ファイルの属性 (タイムスタンプやオーナー等) の保持を行なう。とりあえず、今あるファイルを「そのままの状態で」「手を加えず」コピーしたい場合はこの -a オプションを付けておけばいい。

今回の肝になるのは、--remove-source-files オプション。ファイル同期元のファイルを削除する。言い換えれば、コピーの代わりに移動してしまいしょう、というオプション。mv コマンドを使わず、rsync コマンドを使えるのは、このオプションがあるから。オプション名が長いので、zsh などの補完機能を使うのがお勧め。

実行例を見ると分かる様に mkdir コマンドを使っていない。rsync には、転送先ディレクトリーがない場合に、自動でディレクトリーを作成してくれる機能がある。オプションは複雑だけれども、1 つのコマンドでやりたいことが全てできるので誤操作が減りそう。

欠点を挙げれば、--remove-source-files オプションはファイルの削除をしてもディレクトリーの削除はしないこと。上の例で言えば、img ディレクトリーの中にあるファイルは移動されているのだけど、img ディレクトリーだけは残っちゃってる。ゴミが残っちゃうのは気持ちが悪い。まあ、こんな方法もあるよ、ということで頭の片隅に知識を置いておくのも良いんじゃないかな。

ref

No comments:

Post a Comment