touch -rオプションの使い方を完全ガイド!初心者でもわかるタイムスタンプのコピー方法
生徒
「Linuxで、あるファイルの更新日時を、別のファイルにコピーしたいんですけど、そんなことできますか?」
先生
「はい、できますよ。touchコマンドの-rオプションを使えば、元のファイルのタイムスタンプをそのままコピーできます。」
生徒
「へぇ!わざわざ手動で日付を指定しなくてもいいんですね!」
先生
「その通りです。複数のファイルのタイムスタンプを揃えたいときにとても便利ですよ。」
1. touchコマンドとは?
touchコマンドは、Linuxでファイルの更新日時(タイムスタンプ)を変更したり、空のファイルを作成したりする基本的なコマンドです。
たとえば、以下のように実行すると、ファイルがなければ新しく作られ、すでにある場合は更新日時が現在時刻に変更されます。
touch sample.txt
2. -rオプションとは?
-rオプション(--referenceとも表記可)は、別のファイルの更新日時をコピーするためのオプションです。
形式は以下のとおりです:
touch -r 参照元ファイル 対象ファイル
たとえば、source.txtのタイムスタンプをtarget.txtにコピーしたい場合は、次のようにします:
touch -r source.txt target.txt
3. 実際の使用例と結果確認
では、実際に動作を確認してみましょう。
(1)参照元と対象ファイルを用意する
echo "元のファイルです" > source.txt
sleep 2
echo "新しいファイルです" > target.txt
ls -l
-rw-r--r-- 1 user user 22 9月 16 14:00 source.txt
-rw-r--r-- 1 user user 23 9月 16 14:00 target.txt
(2)target.txtのタイムスタンプをsource.txtに合わせる
touch -r source.txt target.txt
ls -l
-rw-r--r-- 1 user user 22 9月 16 14:00 source.txt
-rw-r--r-- 1 user user 23 9月 16 14:00 target.txt
このように、target.txtの日時がsource.txtと同じになります。
4. タイムスタンプのコピーが便利な場面
この-rオプションは、以下のような場面でとても便利です:
- バックアップファイルの日時を揃えたいとき
- スクリプトで処理後のファイルに元ファイルのタイムスタンプを引き継ぎたいとき
- 同じ更新日時のファイルを複数作りたいとき
手作業で日付を指定するよりも確実でミスがありません。
5. --referenceオプションとの違いは?
touch -rと同じ意味を持つのが、--referenceオプションです。書き方が異なるだけで、機能は同じです。
たとえば、以下の2つはまったく同じ動作をします:
touch -r source.txt target.txt
touch --reference=source.txt target.txt
--referenceの方が意味が明確なので、スクリプトなどでは可読性を重視して使われることもあります。
6. touchの他オプションとの組み合わせ
-rオプションは、他のtouchオプションと組み合わせることはできません(-tや-dと併用不可)。日時はコピー元のファイルに完全に一致させるため、追加設定は不要です。
7. スクリプトでの自動処理例
複数ファイルに同じタイムスタンプを付けたいときは、以下のようなシェルスクリプトが使えます。
#!/bin/bash
touch reference.log
for i in {1..3}
do
fname="copy_$i.txt"
touch "$fname"
touch -r reference.log "$fname"
done
これで3つのファイルがすべてreference.logと同じ日時になります。