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と同じ日時になります。
まとめ
今回の記事では、Linux環境におけるファイル操作の要とも言えるtouchコマンドの-rオプションについて詳しく解説しました。
普段、何気なくファイルのタイムスタンプを確認することは多いですが、特定のファイルと同じ日時に合わせたいというニーズは、システム運用や開発現場で頻繁に発生します。
手動で「2026-03-25 08:00」といった数値を入力するのは手間がかかるだけでなく、打ち間違いのリスクも伴います。
しかし、touch -r(または--reference)を活用すれば、参照元のファイルを指定するだけで、一瞬にして正確なタイムスタンプのコピーが可能になります。
重要なポイントの振り返り
touch -rオプションの最大のメリットは、「正確性」と「効率性」の両立にあります。
以下の3つのポイントをしっかりと押さえておきましょう。
- 参照元を指定するだけ: 複雑な日付フォーマットを覚える必要がなく、既存のファイルから情報を引き継げる。
- 一括処理にも対応: ワイルドカードやループ処理と組み合わせることで、大量のファイルの更新日時を一度に揃えることができる。
- 属性の保持: バックアップ作成時や、プログラムのビルド順序を制御したい場合に、意図的に古い日時を維持する手法として有効。
実践的なコマンド操作のまとめ
学習したコマンドを、実際のターミナル操作で再度確認してみましょう。 まずは、一般ユーザー権限での実行例です。複数のファイルに対して参照元の日時を適用する流れを再現します。
ls -l
-rw-r--r-- 1 user user 0 3月 25 08:00 original.txt
-rw-r--r-- 1 user user 0 3月 25 10:00 update_me.txt
touch -r original.txt update_me.txt
ls -l
-rw-r--r-- 1 user user 0 3月 25 08:00 original.txt
-rw-r--r-- 1 user user 0 3月 25 08:00 update_me.txt
次に、システム全体のログファイルや設定ファイルを管理する場合、管理者権限(ルートユーザー)で実行することもあります。 ルートユーザーとして、システム共通の参照用ファイルから日時をコピーする際の挙動です。
touch /var/log/syslog.old
touch -r /etc/hosts /var/log/syslog.old
ls -l /etc/hosts /var/log/syslog.old
-rw-r--r-- 1 root root 158 3月 1 12:00 /etc/hosts
-rw-r--r-- 1 root root 0 3月 1 12:00 /var/log/syslog.old
応用テクニック:複数ファイルへの一括適用
実務では、1つずつコマンドを打つのではなく、アスタリスクなどのワイルドカードを使って複数のファイルに同じタイムスタンプを付与することがよくあります。 例えば、カレントディレクトリにあるすべてのテキストファイルを、特定の「基準ファイル」と同じ日時に揃えたい場合は以下のように記述します。
touch -r base_file.txt *.txt
このように、Linuxのコマンドは単体でも強力ですが、組み合わせることでその真価を発揮します。
タイムスタンプ管理は地味な作業に見えますが、データの整合性を守るためには欠かせないスキルです。
ぜひ、日々の作業の中で積極的にtouch -rを取り入れて、コマンドライン操作に慣れていってください。
生徒
「先生、ありがとうございました!touch -rを使うと、参照元のファイルを指定するだけでいいから、コマンドを打つのがすごく楽になりました。」
先生
「そうですね。手動で『何月何日何時何分』と指定するのは大変ですし、間違いのもとですから。参照元となるファイルさえあれば、それがカレンダー代わりになるんですよ。」
生徒
「さっき、ワイルドカードを使って一気に変更する方法も試してみたんですけど、一瞬で全部のファイルの日付が揃って感動しました!これ、仕事でログの整理をするときとかにめちゃくちゃ使えそうです。」
先生
「いいところに気づきましたね。ログのローテーションを手動で行うときや、古いバックアップを復元したけれど、管理上の理由で日付を当時のままにしておきたい場合などに、このテクニックは重宝されます。」
生徒
「なるほど。あと、--referenceという長い書き方もあるって教えてもらいましたけど、基本は短い-rで覚えておけば大丈夫ですか?」
先生
「日常的な操作では-rで十分ですよ。ただ、後で自分や他の人が読み返す『シェルスクリプト』の中に書くときは、あえて--referenceと書くことで、『これは参照元を指定しているんだな』と一目でわかるようにする工夫も大切です。」
生徒
「読みやすさも大事なんですね。プログラミングと同じで、Linuxコマンドも相手に伝える意識を持って使っていきたいと思います!」
先生
「その意気です。タイムスタンプ一つとっても、Linuxには奥深い世界があります。次は、特定の時間だけを変更するオプションなども学んでいきましょうね。」