ファイルが新しいときだけコピーや移動する

以前「コピーや移動するときに同名のファイルを退避する」というネタを書きましたが cp コマンドや mv コマンドには、他にも便利な機能(同じことを他の方法でやろうとすると少し手間がかかる)があります。

オプション "-u" です。

このオプションは、コピーや移動するファイルのタイムスタンプが上書きするファイルよりも新しい場合のみ、処理を実行します。

準備。

$ ls -l

-rw-r--r--  1 ubuntu ubuntu    2 11/16 23:40 test1.cgi
-rw-r--r--  1 ubuntu ubuntu    4 11/16 23:42 test2.cgi ←新しい

オプション "-u" を付けてコピーします。

$ cp -u test1.cgi test2.cgi
$ ls -l

-rw-r--r-- 1 ubuntu ubuntu 2 11/16 23:40 test1.cgi
-rw-r--r-- 1 ubuntu ubuntu 4 11/16 23:42 test2.cgi ←上書きされない

コピー先の test2.cgi の方が新しいので上書きされません。

移動してみます。

$ mv -u test1.cgi test2.cgi
$ ls -l

-rw-r--r-- 1 ubuntu ubuntu 2 11/16 23:40 test1.cgi ←消えない
-rw-r--r-- 1 ubuntu ubuntu 4 11/16 23:42 test2.cgi ←上書きされない

上書きされないだけでなく、元ファイル test1.cgi も残ります。

これを以前のファイル退避のオプション "-b" と合わせると 『タイムスタンプが新しい場合のみ、コピー(移動)して、さらに退避ファイルを作成する』という動きになります。

これだけでも面白いですが これをバッチ処理に組み込むと、 タイムスタンプという別軸のフラグで 上書きする/しないを制御できるようになります。

Google サイト内検索

Amazonアソシエイト