touch --referenceオプションの使い方を完全ガイド!初心者でもわかるタイムスタンプのコピー方法
生徒
「先生、Linuxでファイルの時間(タイムスタンプ)を別のファイルと同じにしたい時って、どうすればいいですか?」
先生
「その場合はtouchコマンドの--referenceオプションを使うと便利ですよ。」
生徒
「えっ?touchって新しいファイルを作るコマンドじゃないんですか?」
先生
「実はtouchは、新しいファイルを作るだけじゃなくて、既存のファイルのタイムスタンプを変更することもできるんですよ。詳しく見ていきましょう。」
1. touch --referenceとは?
touch --referenceオプションは、あるファイルのタイムスタンプ(作成日時・更新日時)を、別の参照ファイルのものに合わせて変更できるLinuxコマンドです。--referenceの他に、短縮形の-rでも同じ動作をします。
たとえば、あるファイルを他のファイルと同じ「更新日時」にしたいとき、普通なら日時を手入力で設定しなければなりませんが、--referenceを使えば一発で完了します。
2. touch --referenceの基本構文
まずは基本的な使い方を見てみましょう。
touch --reference=参照ファイル名 対象ファイル名
これで、対象ファイルの「アクセス日時」と「更新日時」が、参照ファイルとまったく同じになります。
3. 実際にやってみよう(使用例付き)
では、実際のファイルを使って--referenceオプションを試してみましょう。
以下のように、2つのファイルがあるとします。
ls -l
-rw-r--r-- 1 user user 0 Sep 16 12:00 old.txt
-rw-r--r-- 1 user user 0 Sep 17 08:30 new.txt
old.txtのタイムスタンプをnew.txtにコピーしてみましょう。
touch --reference=old.txt new.txt
再度確認すると、new.txtの時刻がold.txtと同じになっていることが分かります。
ls -l
-rw-r--r-- 1 user user 0 Sep 16 12:00 old.txt
-rw-r--r-- 1 user user 0 Sep 16 12:00 new.txt
4. -rオプションとの違いは?
-rオプションは、--referenceの短縮形です。どちらを使っても動作はまったく同じです。違いは表記の長さだけです。
たとえば、次の2つのコマンドは同じ意味です。
touch --reference=old.txt new.txt
touch -r old.txt new.txt
スクリプトなどでは短く書ける-rが使われることが多いですが、初心者の方は意味が分かりやすい--referenceの方が安心かもしれませんね。
5. ファイルが存在しない場合の挙動
もし参照先のファイルが存在しなければ、エラーになります。また、対象ファイルが存在しない場合は、新規にファイルを作成し、そのタイムスタンプをコピーします。
touch --reference=old.txt newfile.txt
この例では、newfile.txtがなければ新しく作成され、old.txtと同じ時刻が設定されます。
6. 他のファイル操作コマンドとの違い
ここで、よく似た操作を行う他のLinuxコマンドと比較しておきましょう。
cp:ファイルをコピーするが、通常はタイムスタンプが更新されるcp -p:タイムスタンプを保持してコピーできるrsync -a:ファイル属性(タイムスタンプ含む)を保持して同期できる
これらはコピー時に使うコマンドですが、touch --referenceはあくまで「既存ファイルのタイムスタンプを操作する」目的で使います。
7. ls -lでタイムスタンプを確認しよう
ファイルの時刻情報を確認するにはls -lコマンドを使います。
ls -l old.txt new.txt
-rw-r--r-- 1 user user 0 Sep 16 12:00 old.txt
-rw-r--r-- 1 user user 0 Sep 16 12:00 new.txt
このように、2つのファイルの日時がそろっていれば、正しくコピーできています。