🈳

空のアーカイブ作成(tar)

2024/08/24に公開

はじめに

もうすぐ 2024 年の 8 月が終わろうとしています。 こんな不条理が許されてはなりませんから、全く関係のないところで不条理に抗ってみましょう。

空のアーカイブ作成はご容赦願います

GNU の tar(1) でアーカイブを作成するときの構文は以下の通りです。 引数 FILE... は省略可能であるように見えます。

tar --create [--file ARCHIVE] [OPTIONS] [FILE...]

しかし、実際に引数 FILE... を省略して実行してみると「空のアーカイブ作成はご容赦願います」と怒られてしまいます。

$ tar --create --file=empty.tar
tar: 空のアーカイブ作成はご容赦願います
より詳しい情報は 'tar --help' または 'tar --usage' で.

なんとしてでも空のアーカイブを作成する

空のアーカイブを作るために以下の手順を踏みます。

  1. ファイルの含まれているアーカイブを作成する
  2. アーカイブに含まれているファイルを全て削除する
  3. 空のアーカイブが完成する

実際にやってみましょう。

まず、ファイルの含まれているアーカイブを作成します。 アーカイブに格納するファイルは何でも良いのですが、空のファイル dummy を作成し、それを指定します。

$ >dummy
$ tar --create --file=empty.tar dummy
$ tar --list --verbose --file=empty.tar
-rw-rw-r-- mkn/mkn           0 2024-08-24 20:12 dummy

そして、その出来上がったアーカイブからメンバ dummy を削除します。 アーカイブからメンバを削除するには tar --delete を利用します。

$ tar --delete --file=empty.tar dummy
$ tar --list --verbose --file=empty.tar

これでメンバを何も持たない空のアーカイブが完成しました。

空のアーカイブを眺める

空のアーカイブは一体どのようなファイルになっているのでしょう。 みんなだいすき od(1) でファイルの内容をダンプしてみましょう。

$ od empty.tar 
0000000 000000 000000 000000 000000 000000 000000 000000 000000
*
0024000

なるほど、これは 10240 個のヌルバイトの集まりであるようです。

簡単に空のアーカイブを作成する

つまり、以下のコマンドを実行することで簡単に空のアーカイブを作成できます。

$ dd if=/dev/zero of=empty.tar bs=512 count=20
20+0 records in
20+0 records out
10240 bytes (10 kB, 10 KiB) copied, 0.000130402 s, 78.5 MB/s

おわりに

おわりです。

この記事の元ネタは 2020 年のツイートにあります。

Discussion