事象
tarを使っていたら警告tar: Removing leading `/' from member names
が出ていたので、何だろうと思い、調べてみた内容と検証結果を備忘録として残しておきます。
tarでアーカイブの作成(とgzipへの圧縮)を行います。srcフォルダのアーカイブをdstフォルダにa.tgzとして保存したいです。ところが、実際にはsrcフォルダではなく、ルートフォルダ直下のhomeフォルダがアーカイブされてしまいます。
$ pwd
/home/username/temp
$ ls
dst src
$ ls src
a.txt b.txt c.txt
$ ls dst
$ tar cvf /home/username/temp/dst/a.tgz /home/username/temp/src
tar: Removing leading `/' from member names
/home/username/temp/src/
/home/username/temp/src/c.txt
/home/username/temp/src/a.txt
/home/username/temp/src/b.txt
$ ls dst
a.tgz
$ tar xvf dst/a.tgz dst
tar: dst: Not found in archive
tar: Exiting with failure status due to previous errors
$ tar xvf dst/a.tgz
home/username/temp/src/
home/username/temp/src/c.txt
home/username/temp/src/a.txt
home/username/temp/src/b.txt
$ ls
dst home src
どうやらtarコマンドでは絶対パスを指定すると、先頭の/が削除されるようです。相対パスで指定してねってことなんですかね。
解決方法
ということで、カレントディレクトリにsrcフォルダがある状態でtarコマンドを以下のように実行すれば良いです。
$ tar cvf /home/username/temp/dst/a.tgz src
src/
src/c.txt
src/a.txt
src/b.txt
カレントディレクトリ以外のフォルダをアーカイブしたい場合は、-Cオプションを使います。-Cオプションで指定したディレクトリに移動した状態でアーカイブを実行できます。
$ pwd
/home/username/temp2
$ tar cvf a.tgz -C /home/username/temp src
src/
src/c.txt
src/a.txt
src/b.txt
しかし、なんで絶対パスで指定できないんですかね。