リモートシステムのディレクトリを使用して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つの理由があると思います。
タルボールが破損しています。以下で確認してください。
$ tar -tvf tarball.tar
場合によっては、いくつかのエラーが表示されます。
「仮想」ファイルシステムを使用します。ヒューズ圧縮または暗号化されたファイルシステム(オプションのファイル圧縮/暗号化を使用)ファイル名が少し短いか、ファイルシステムの制限と同じです。トリックは、たとえば、ヒューズ圧縮を使用してディレクトリをマウントしてファイル名を作成するときに、
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
私の場合、問題のすべてのファイルにメタ情報を含むトラック番号が付けられているため、一部の名前を切り捨てることは問題にならないようです。元のファイル名を復元する方法を見つける必要があるかもしれません。