はじめに
みなさま、tarコマンドを活用されていますでしょうか?
ディレクトリ構成毎ファイルをアーカイブして、バックアップデータとして、tarファイルを作成します。
作成したtarファイルを別のサーバーで展開することで、同じディレクトリ構成が複製されます。
パーミッション、タイムスタンプも維持されますので、バックアップとして最適です。
そんなアーカイブを作成するコマンドを紹介します。
環境
OS : AlmaLinux 8
tarバージョン : 1.30
使い方
事前に、サンプルファイルとして以下を作成しておきました。
$ find
.
./AAA
./AAA/aaa.txt
./BBB
./BBB/bbb.txt
./CCC
./CCC/ccc.txt
$
$ find -type f
./AAA/aaa.txt
./BBB/bbb.txt
./CCC/ccc.txt
$
$ find -type f | xargs cat
aaa
bbb
ccc
$
これから紹介するオプションは以下です。
| c | アーカイブを作成 |
| t | アーカイブの中身を一覧で表示 |
| r | 指定したファイルをアーカイブに追加 |
| d | アーカイブと実際のファイルとの差分を表示 |
| delete | アーカイブから指定したファイルを削除 |
| x | アーカイブからファイルを展開 |
まずは、アーカイブを作成してみます。
$ tar -cvf ./data.tar ./*
./AAA/
./AAA/aaa.txt
./BBB/
./BBB/bbb.txt
./CCC/
./CCC/ccc.txt
$
$ ls -la
total 16
drwxrwxr-x 5 future future 55 Feb 11 12:50 .
drwx------ 15 future future 4096 Feb 11 12:27 ..
drwxrwxr-x 2 future future 21 Feb 11 12:45 AAA
drwxrwxr-x 2 future future 21 Feb 11 12:46 BBB
drwxrwxr-x 2 future future 21 Feb 11 12:46 CCC
-rw-rw-r-- 1 future future 10240 Feb 11 12:50 data.tar
$
アーカイブの中身を確認してみましょう。
$ tar -tvf data.tar
drwxrwxr-x future/future 0 2026-02-11 12:45 ./AAA/
-rw-rw-r-- future/future 4 2026-02-11 12:45 ./AAA/aaa.txt
drwxrwxr-x future/future 0 2026-02-11 12:46 ./BBB/
-rw-rw-r-- future/future 4 2026-02-11 12:46 ./BBB/bbb.txt
drwxrwxr-x future/future 0 2026-02-11 12:46 ./CCC/
-rw-rw-r-- future/future 4 2026-02-11 12:46 ./CCC/ccc.txt
$
想定どおり、アーカイブされてそうです。
作成したアーカイブに新たなファイルを追加することができます。
新たなファイル:zzz.txt を作成します。
$ echo zzz > zzz.txt
$
$ ls -la
total 20
drwxrwxr-x 5 future future 70 Feb 11 13:10 .
drwx------ 15 future future 4096 Feb 11 12:27 ..
drwxrwxr-x 2 future future 21 Feb 11 12:45 AAA
drwxrwxr-x 2 future future 21 Feb 11 12:46 BBB
drwxrwxr-x 2 future future 21 Feb 11 13:07 CCC
-rw-rw-r-- 1 future future 10240 Feb 11 13:08 data.tar
-rw-rw-r-- 1 future future 4 Feb 11 13:10 zzz.txt
$
zzz.txt を追加します。
$ tar -rf data.tar ./zzz.txt
追加できたか、アーカイブの中身を確認してみましょう。
$ tar -tvf data.tar
drwxrwxr-x future/future 0 2026-02-11 12:45 ./AAA/
-rw-rw-r-- future/future 4 2026-02-11 12:45 ./AAA/aaa.txt
drwxrwxr-x future/future 0 2026-02-11 12:46 ./BBB/
-rw-rw-r-- future/future 4 2026-02-11 12:46 ./BBB/bbb.txt
drwxrwxr-x future/future 0 2026-02-11 12:46 ./CCC/
-rw-rw-r-- future/future 4 2026-02-11 13:07 ./CCC/ccc.txt
-rw-rw-r-- future/future 4 2026-02-11 13:10 ./zzz.txt
$
追加されてますね。
差分の確認もできるとのことで、zzz.txtの内容を編集してみます。
$ vi zzz.txt
$
$ cat zzz.txt
zzzZ
$
-d で差分が確認できます。
$ tar -df ./data.tar
./zzz.txt: Mod time differs
./zzz.txt: Size differs
$
タイムスタンプと、ファイルサイズに差分があると表示されましたね。
中身をもとに戻してみます。
$ vi zzz.txt
$
$ cat zzz.txt
zzz
$
再度、差分を確認してみましょう。
$ tar -df ./data.tar
./zzz.txt: Mod time differs
$
ファイルサイズは差分なしとなって、タイムスタンプのみが差分ありと表示されました。
アーカイブから任意のファイルを削除することもできます。
$ tar --delete -f ./data.tar ./zzz.txt
$
$ tar -tvf ./data.tar
drwxrwxr-x future/future 0 2026-02-11 12:45 ./AAA/
-rw-rw-r-- future/future 4 2026-02-11 12:45 ./AAA/aaa.txt
drwxrwxr-x future/future 0 2026-02-11 12:46 ./BBB/
-rw-rw-r-- future/future 4 2026-02-11 12:46 ./BBB/bbb.txt
drwxrwxr-x future/future 0 2026-02-11 12:46 ./CCC/
-rw-rw-r-- future/future 4 2026-02-11 13:07 ./CCC/ccc.txt
$
削除されましたね。続いて、ファイルを展開してみましょう。
展開するために、新たにディレクトリを作成します。
$ mkdir tmp
$
$ cd tmp/
$ ls -ltr
total 0
$
準備ができたので、ccc.txt を展開します。
$ tar -xvf ../data.tar ./CCC/ccc.txt
./CCC/ccc.txt
$
$ find -ls
141834403 0 drwxrwxr-x 3 future future 17 Feb 11 13:16 .
202132028 0 drwxrwxr-x 2 future future 21 Feb 11 13:16 ./CCC
203460106 4 -rw-rw-r-- 1 future future 4 Feb 11 13:07 ./CCC/ccc.txt
$
展開できましたね。
最後に、findコマンドでリストしたファイルを対象に、アーカイブすることも可能です。
$ find -type f | xargs tar -zcvf ./backup.tar.gz
./AAA/aaa.txt
./BBB/bbb.txt
./CCC/ccc.txt
./data.tar
./zzz.txt
./tmp/CCC/ccc.txt
$
$ tar -ztvf backup.tar.gz
-rw-rw-r-- future/future 4 2026-02-11 12:45 ./AAA/aaa.txt
-rw-rw-r-- future/future 4 2026-02-11 12:46 ./BBB/bbb.txt
-rw-rw-r-- future/future 4 2026-02-11 13:07 ./CCC/ccc.txt
-rw-rw-r-- future/future 10240 2026-02-11 13:14 ./data.tar
-rw-rw-r-- future/future 4 2026-02-11 13:12 ./zzz.txt
-rw-rw-r-- future/future 4 2026-02-11 13:07 ./tmp/CCC/ccc.txt
$
まとめ
いかがでしたか?
バックアップ取得のためのアーカイブ作成で重宝します。
サーバーリプレイスの際、新サーバーへ直接通信できる場合は、rsync等でデータを複製できますが、そうでない場合、作成したtarファイルを、中継サーバーを介して、新サーバーへ転送し、展開することでデータの複製が可能です。
冒頭にも記載しましたが、パーミッション、タイムスタンプ等の情報も保持されますので、環境の複製に最適です。
是非とも活用ください。

