工作と競馬2

電子工作、プログラミング、木工といった工作の記録記事、競馬に関する考察記事を掲載するブログ

tarでアーカイブを作成するときに気を付けること(展開先のパーミッションを変化させてしまわないため)

先日、tarでアーカイブを作成し、あるディレクトリに展開したところ、展開したディレクトリのパーミッションが変わってしまった。このせいで、展開先ディレクトリにある他のファイルを参照していた他のプログラムがエラーを起こしてしまい、ひどい目に遭った。なぜ展開先ディレクトリが影響を受けてしまうのかとイライラしたが、結局tarでアーカイブを作成するときのやり方がまずかった。今後ミスしないようにメモしておく。


アーカイブ

hoge/
  abc.tgz --- 作成されたアーカイブ
  src/
    a.txt
    b.txt
    :

srcディレクトリ内のファイルたちをアーカイブするつもりで、以下コマンドを実行。

cd src
tar czvf ../abc.tgz ./

展開先

dest/
   abc.tgz --- アーカイブファイル
   abc/
     a.txt
     :

destというディレクトリにabc.tgzをコピーし、tarで展開したら、destのパーミッションが755に変わってしまった。

cd dest
tar xzvf abc.tgz .


原因

自分としては、srcディレクトリ中身すべてをアーカイブ対象としたつもりが、srcディレクトリが対象になってしまっていたこと。そのせいで、展開先ディレクトリdestにsrcが展開されてしまうために起こる。


正しい方法

src内のファイルたちをちゃんと指定する。つまり、./ではなく、./*。

cd src
tar czvf ../abc.tgz ./*

展開時には、

cd dest
tar xzvf abc.tgz -C ./

とする。