cpコマンドでファイルの属性(オーナー、グループ、パーミッション、日付)を保持してコピーしたい場合、pオプションを使用するが、 タイムスタンプのみ保持したい場合、preserveオプションを使用する。preserveオプションでは個別に保持したい属性を指定できる。 ロングオプションなので--perserveのように付加する。
manコマンドを見ればわかるようにpreserveオプションではmode、ownership、timestampsが指定可能。
--preserve[=ATTR_LIST]
preserve the specified attributes (default: mode,ownership,timestamps), if possible additionals attributes:
context, links, xattr, all
ちなみにpオプションは全てを指定したのと同等。(以下manコマンドの説明より)
-p same as --preserve=mode,ownership,timestamps
さてタイムスタンプのみ保持する場合、実際のコマンド構文は以下になる。
cp --preserve=timestamps {コピー元} {コピー先}
サンプル
$ cp --preserve=timestamps sample.sh /file/system/bin
コピー先のファイルオーナ以外のユーザで実行すると下記エラーが発生するため、あらかじめオーナユーザにスイッチしておく必要がある。 なお下記エラーが発生しても、タイムスタンプを保持しない状態でファイルのコピー自体は実施されてしまっているので注意。
cp: preserving times for `/file/system/bin/sample.sh': Operation not permitted
ファイルをコピーした後、個別にタイムスタンプだけ同じにしたい場合はtouchコマンドでも可能
touch -r {コピー元} {コピー先}