それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

指定したファイルの属性情報だけをコピーする。更新日・権限を揃えたい。

ファイルの属性情報を同じにしたい

ファイルをコピーすると、作成日時の情報が喪失したり、しなかったり。イマイチ安定しない。

ファイルの作成日時って結構大事な指標で、ファイルを並べたり整理整頓したり、探したりに使えます。

だからこの情報が失われるとちょっと面倒なことが多い

cp --preserve=all src dest

ファイルタイムスタン、パーミッションを維持したままコピーする

でも、うっかりやっちゃったら?

ファイルのpreserved を忘れたままコピーしたとしたら?

削除してコピーし直し。なんだろうけど。ファイルの属性情報だけをコピーする方法がないかと思いました。

ファイルの属性情報をコピーする方法

ファイルの属性情報を同じにするには、中身ではなく、属性情報を限定してコピーすると大丈夫。

GNU coreutils の cp がこの機能に対応している。

実際にやってみた例。

  1. ファイルをtouch で作成して
  2. ファイル属性をコピーして
  3. ファイルを属性情報を確認してみる。
takuya@~/Desktop$ touch a
takuya@~/Desktop$ cp --preserve=all --attributes-only  IMG_1347.jpg a
takuya@~/Desktop$ stat a
  File: 'a'
  Size: 0           Blocks: 0          IO Block: 4096   regular empty file
Device: 1000004h/16777220d  Inode: 84448029    Links: 1
Access: (0644/-rw-r--r--)  Uid: (  501/  takuya)   Gid: (   20/   staff)
Access: 2016-03-14 21:18:49.000000000 +0900
Modify: 2016-03-13 04:16:57.000000000 +0900
Change: 2016-03-14 21:18:53.000000000 +0900
 Birth: 2016-03-13 04:16:57.000000000 +0900
ポイントは preserve と --attribute-only の同時使用
  • --attributes-only のオプションだけでは、動作しなかった。ここでオカシイなと思って諦めてた。

  • --preserve と同時に使用する。

ちょっとややこしいね。

alias に登録しても良い。

.bash_aliases に次のように登録したら便利かもしれない。

alias cp='cp --preserve=all'
alias cp_attribute="cp --preserve=all --attributes-only"