Extrat tar "開けません: ファイル名が長すぎます"

Extrat tar "開けません: ファイル名が長すぎます"

リモートシステムのディレクトリを使用してtarファイルを作成しました。

tar -czvf

解凍したいローカルコンピュータにscpします。

tar -xzvf

しかし、私は次のようになります。Cannot open: File name too long

私のlubuntu 12.04ローカルマシンには次のものがあります tar (GNU tar) 1.26

これでリモートシステムにアクセスできません。必要に応じてバージョンを確認します。

特にリモートシステムがオフラインなので、新しいtarを作成せずに抽出したいと思います。

ちなみに名前が長くても、きちんとしたアーカイブの作り方をご存知でしたら承諾いたします。

答え1

tarファイル名を256バイト(GNU拡張子を含む)に制限してください。 Linuxファイルシステムは、ファイル名あたり少なくとも256バイトをサポートします。これは、圧縮されたファイルをtarエラーなしで抽出できることを意味します。だから私は2つの理由があると思います。

  1. タルボールが破損しています。以下で確認してください。

    $ tar -tvf tarball.tar
    

    場合によっては、いくつかのエラーが表示されます。

  2. 「仮想」ファイルシステムを使用します。ヒューズ圧縮または暗号化されたファイルシステム(オプションのファイル圧縮/暗号化を使用)ファイル名が少し​​短いか、ファイルシステムの制限と同じです。トリックは、たとえば、ヒューズ圧縮を使用してディレクトリをマウントしてファイル名を作成するときに、foo.bar仮想ファイルシステムが名前付きファイルを生成してfoo.bar.gz透明に圧縮しますが、実際のファイル名は非表示になることです。名前の長さが254バイトのファイルを生成すると、ファイルにサフィックスを追加しようとするため、エラーが発生します。

    この場合、仮想ファイルシステムの外部からtarballを抽出すると便利です。

    $ sudo mkdir /home/${USER}-temp
    $ sudo chown $USER /home/${USER}-temp
    $ tar -xvf tarball.tar -C /home/${USER}-temp
    

とにかく詳細については、追跡してください。

$ strace -o tar-strace.log tar -tf tarball.tar
$ ltrace -o tar-ltrace.log tar -tf tarball.tar

答え2

これがファイル保存の回避策です。 tarを抽出するときは、次のオプションを追加します。

  • --xform'を使用してください。/sed/表現/'長い名前を減らして表現します。
  • -Tを使用してください。ファイル名一覧すべてのアーカイブの代わりに問題のあるファイルのみを抽出します。

例:

長いファイル名を/tmp/missing.txtに入れることから始めてください。

tar -x -T /tmp/missing.txt --xform 's/Beethoven-.*\.flac/B.flac/g' -f backup/home.tar

私の場合、問題のすべてのファイルにメタ情報を含むトラック番号が付けられているため、一部の名前を切り捨てることは問題にならないようです。元のファイル名を復元する方法を見つける必要があるかもしれません。

関連情報