試験運用中なLinux備忘録・旧記事

はてなダイアリーで公開していた2007年5月-2015年3月の記事を保存しています。

cpコマンドでファイルやディレクトリをコピーした際に保持される情報/属性について

(2019/4/10)本記事は「cpコマンドのコピーで保持される属性」へ移動した。

以下、以前の内容となる。

ファイルやディレクトリをコピーした際に保持できる情報/属性の種類

ファイルやディレクトリにはその名前の他にファイルシステム上の幾つかの情報が存在する。
cpコマンドでのコピーの際には、下のそれぞれについて保持するかしないかをオプション指定によって選択することができる。

ただ、コピーを行うユーザの権限によっては保持されないこともあり、例えば所有者と所有グループは一般ユーザ権限で保持しようとしてもそうはならずにcpコマンドを実行したユーザが新規に作成するファイルと同様に扱われる。

-pオプション指定時

-pオプションを付けると

  • 最終更新日時と最新アクセス日時
  • 所有者と所有グループ
  • アクセス権(パーミッション)

が保持される。
-pオプションだけを付けた場合、シンボリックリンクを1番目の引数(コピー対象)としたときにコピー出力はそのリンク先の複製となり、シンボリックリンクシンボリックリンクとしてはコピーされない。

-aオプション指定時

-aオプションを付けると、はじめに挙げた情報の全てが保持される。更にディレクトリ(以下全て)を対象としたコピーも可能になり、シンボリックリンクを対象としたコピー時にはコピー出力もシンボリックリンクとなる(シンボリックリンクシンボリックリンクとしてコピーされる)。
コピー対象と同じ形が得たいときにはこのオプションを指定する習慣をつけておくとよい。

保持される情報を細かく指定する

保持される情報は--preserveというオプションで細かく指定でき、その種類を示す以下の文字列をコンマ区切りで並べた形で指定する。

例えば、アクセス権とタイムスタンプだけを保持したい場合は--preserve=mode,timestampsとする(一覧部分の順番は逆でも可)。
--preserve=allを指定すると、上記の全てを保持しようとする。-aオプションもこの指定を含んでいる。
--no-preserve=[一覧]オプションを指定すると、保持しない情報が指定できる(例:--no-preserve=mode,ownership)。
頻繁に用いたい組み合わせがある場合はエイリアスを定義すると便利。

関連: -aオプションに含まれる指定を同オプションを用いずに行う

シンボリックリンクシンボリックリンクとしてコピーするための指定

-aオプションを用いずにシンボリックリンクシンボリックリンクとしてコピーする場合は-Pオプションを付ける。

指定ディレクトリ以下のコピーを行うための指定

-aオプションを付けずに指定ディレクトリ以下全てをコピーする場合は-Rオプションを付ける。

関連記事:

参考URL:

使用したバージョン: