tar での長いファイル名を持つファイルの扱い

長いファイル名の扱いというのはどこに行っても面倒な部分を内包していて、今まで気づいていなかっただけで実は今までも地雷を踏んでいたのではないかと思うようなことがあった。

gnu tar と posix tar とで長いファイル名の扱いが違う?のかな? linux の tar と、IBMUNIX である AIX の tar で長いファイル名の扱いが違ったのでその話。

長いファイル名、以下のようなのがあったとして

$ ls /tmp/test/The_quick_brown_fox_jumps_over_the_lazy_dog/The_quick_brown_fox_jumps_over_the_lazy_dog_1234567890.txt

gnu tar でアーカイブを作る

$ /opt/freeware/bin/tar cvf /tmp/longfile02.tar /tmp/test/The_quick_brown_fox_jumps_over_the_lazy_dog/The_quick_brown_fox_jumps_over_the_lazy_dog_1234567890.txt

AIX 付属の tar で見る

$ tar tvf /tmp/longfile02.tar
?rw-r--r-- 4001 4000     112 Dec 01 00:03:17 2014 ././@LongLink
-rw-r--r-- 4001 4000     242 Dec 01 00:01:43 2014 tmp/test/The_quick_brown_fox_jumps_over_the_lazy_dog/The_quick_brown_fox_jumps_over_the_lazy_dog_123

ファイル名が途中で切れてる!そんで、@LongLink というファイル?が追加されてる。このファイルを gnu tar で見ると正常。

$ /opt/freeware/bin/tar tvf /tmp/logf02.tar
-rw-r--r-- 4001/4000     242 2014-12-01 00:01:43 tmp/test/The_quick_brown_fox_jumps_over_the_lazy_dog/The_quick_brown_fox_jumps_over_the_lazy_dog_1234567890.txt

つうわけで、gnu tar で操作したアーカイブが紛れ込んでそうな環境では常に gnu tar を使ってたほうが安心じゃないかなって思いました。