tarファイルの解凍で「ディレクトリは状態を展開できるようになる前に名前を変更されました」というエラーが出る

このQ&Aのポイント
  • tarファイルの解凍でエラーが発生し、ディレクトリが展開できない問題が発生しています。
  • エラーメッセージから、シンボリックリンクの存在が原因である可能性があります。
  • tarは通常、シンボリックリンクを無視しますが、このエラーはシンボリックリンクが原因で発生する可能性があります。
回答を見る
  • ベストアンサー

tar(*.tgz)ファイルの解凍の際に「ディレクトリは状態を展開でき

tar(*.tgz)ファイルの解凍の際に「ディレクトリは状態を展開できるようになる前に名前を変更されました」というエラーが出ます。 Linuxマシンでのバックアップをtarファイルにしました(20GB)。そして、そのtarファイルを、Win7マシンに接続しているUSBハードディスク(NTFS)にコピーして展開しました。ただし、展開の際には、win7上にVMwareをインストールして、仮想マシンとしてubuntsuを走らせ、ファイルの共有でUSBハードディスクを読み書きしています。その際、以下のようなエラーが出て終了しました。 ------------------------- tar: AAA/BBB/dir1/dir2: ディレクトリは状態を展開できるようになる前に名前を変更されました tar: AAA/BBB/dir1: ディレクトリは状態を展開できるようになる前に名前を変更されました tar: AAA/BBB/dir3: ディレクトリは状態を展開できるようになる前に名前を変更されました tar: AAA/BBB: ディレクトリは状態を展開できるようになる前に名前を変更されました tar: 前のエラーにより失敗ステータスで終了します -------------------------- 調べたところ、 AAA/BBB/dir1/dir2とAAA/BBB/dir3の中には、Linuxマシン上での他の場所に向けてシンボリックリンクファイルがあることがわかりました。 tarは、シンボリックリンクは無視すると思っていたのですが、このようなエラーがシンボリックリンクが原因で出ることがありえますか?それとも、他の原因でしょうか?

  • amu
  • お礼率51% (47/92)

質問者が選んだベストアンサー

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4845/10255)
回答No.1

エラーメッセージから推測すると、tarは(1)ディレクトリの作成(2)そのディレクトリの下のファイルの解凍(3)ディレクトリのタイムスタンプをtar内の情報に設定、と進みますが、(3)をしようとしたときにそのディレクトリの名前が変わっていた等でのタイムスタンプ変更が失敗したのではないかと思います。 そうだとするとファイルの解凍自体は成功しているはずですが。 原因はちょっとわかりません。FATかと思ったけどNFTSなんですよね。大文字小文字とかかもしれません。

amu
質問者

お礼

ありがとうございます。ファイルは確かに解凍されているようなのですが、万一失敗しているファイルがあると困るため、ノーエラーで行いたいと思ってます。

amu
質問者

補足

・シンボリックリンクが含まれている ・文字数がNTFSフォーマットの上限を超えている 以上2点のせいだということがわかりました。

関連するQ&A

  • tarでディレクトリのみをアーカイブしたい

    【質問】 Solaris8 純正のtarコマンドで、ファイルを除いてディレクトリのみをアーカイブする良い方法を模索しています。 【背景】 ディレクトリ構成をtarで抽出し、別のマシンで解凍する(/export/homeなど)際に、配下のファイルサイズが大きく時間がかかるため、抽出の際にファイルを除外しておきたい 【前提】 tarでアーカイブする際、ディレクトリを指定すると配下のファイルも再帰的にアーカイブされてしまう。 【詳細】 例えば、以下のようなディレクトリ構造のとき、 AAA/ AAA/aaa/ AAA/aaa/hoge.c BBB/ BBB/foo.txt ディレクトリのみをtarアーカイブして、 AAA/ AAA/aaa/ BBB/ という内容のtarアーカイブを作成するとき、私は以下のようなやり方をしています。 A.全抽出→解凍→ファイル消し→再抽出 # tar cf - AAA BBB | (cd /tmp/work; tar xvf -) # cd /tmp/work # find . -type f -exec rm {} \; # tar cvf /dev/rmt/0 AAA BBB B.除外リスト作成→除外リスト指定で抽出 # find AAA BBB -type f > exclude-list # tar cvfX /dev/rmt/0 exclude-list AAA BBB どちらも結果的にはディレクトリのみ抽出できるので問題はないのですが、ちょっと手間がかかります。コマンドライン1行でできる良い方法があれば教えて下さい。 # そもそも【前提】が私の思い込みかもしれないので、 # 「違うよ」という指摘があればお願いします。

  • tar.gzが解凍できない。

    古いPCにVineLinux2.1.5を入れました。PCのSPEC上、これしか入りませんが、家庭内LANのみでLinux練習用です。Apache2.0.50を手持ちのCDから「/tmp」にコピーし、「$ ls /tmp」 で確認すると、httpd-2.0.50.tar.gz が出来ています。ところが、 $ tar zxvf httpd-2.0.50.tar.gz[Return] とすると、 「そのようなファイルやディレクトリはありません」 tar(子プロセス)エラーを回復できません:直ちに終了します。 tar:子プロセスがステータス2を返してきました。 tar:エラー終了が前のエラーから遅れました。 とのメッセージが出て、解凍できません。 「/」にコピーし直したり、ユーザー権限をroot権限に変えたりしてTryしても、同じエラーメッセージが出ます。 原因は何でしょうか? どうすれば解決できるでしょうか? 古いバージョンのlinuxで恐縮ですが、もし、何か解決のヒントをお持ちの方がおられましたら、よろしくお願い致します。

  • サイズの大きいファイルのtarでの展開不具合

    お世話になります。 サーバーA上のあるディレクトリ以下のファイルを"tar jcf"でtar.bz2の形でファイルをバックアップし、サーバーBでそのファイルを”tar xvjf”で展開するという運用をしています(cronで毎日実行しています)。 運用当初は問題なく展開できていたのですが、最近展開が途中で止まっているようです。展開できていた時と現在ではtar.bz2のファイルのサイズくらいしか違いが思い当たりません。 現在、tar.bz2のファイルが16GBを超えているのですがtarにファイルサイズの制限などがあるのでしょうか?

  • sav-linux-free-9.tgzの解凍等。

    https://blog.1q77.com/2015/05/using-sophos-anti-virus-for-linux/ 上記URLを参考に実行しましたが、途中で下記のような メッセージが出てきました。 どうすればいいでしょうか? ご多忙中恐れいります。 ご回答の程、宜しくお願い申し上げます。              tar ztf sav-linux-free-9.9.tgz tar (child): sav-linux-free-9.9.tgz: open 不能: そのようなファイルやディレクトリはありません tar (child): Error is not recoverable: exiting now tar: Child returned status 2 tar: Error is not recoverable: exiting now

  • tar解凍でパス名を無しにする方法

    Windowsのtar.exeでも、Unix系のものでも良いのですが、 tarで解凍する際に、パス名を付けず、素のファイル名だけで 解凍する方法はありますか? 例えば、 > tar tvf test.tar -rw-rw-r-- 13 2006-03-09 14:19:39 ./file4 drwxrwxr-x 0 2006-03-09 14:16:20 dir1/ drwxrwxr-x 0 2006-03-09 14:19:12 dir1/dir12/ -rw-rw-r-- 15 2006-03-09 14:19:10 dir1/dir12/file1 drwxrwxr-x 0 2006-03-09 14:16:32 dir2/ drwxrwxr-x 0 2006-03-09 14:16:33 dir2/dir21/ drwxrwxr-x 0 2006-03-09 14:19:19 dir2/dir21/dir211/ -rw-rw-r-- 14 2006-03-09 14:19:17 dir2/dir21/dir211/file2 drwxrwxr-x 0 2006-03-09 14:19:32 dir2/dir21/dir212/ -rw-rw-r-- 25 2006-03-09 14:19:30 dir2/dir21/dir212/file3 となっているときに、このtest.tarを何らかの方法で解凍して、 1箇所のディレクトリ内(カレントで可)に、 file1~file4 を解凍させたいのですが、 何か方法があるでしょうか? よろしくお願いします。

  • ダウンロードファイルなどは、どこのディレクトリ に保存するのが一般的なのか

    ダウンロードファイルなどは、どこのディレクトリ に保存するのが一般的なのでしょうか? 現時点では、tar.gzファイルは、 /usr/local に保存しております。 理由は、プログラムなどが、/usr/local に 保存されることが多いので、/usr/local に tar.gzファイルをおき、そこで展開することが 多いです。 #一方で、/usr/localが肥大化して困っております。 皆さんはどこに、ダウンロードし、 どのように、tar.gzファイルを展開していますか? Linuxのディレクトリで、推奨される使用方法が ありましたらご教授下さい。

  • 絶対パスでアーカイブされたファイルをtarコマンドの相対パスで展開

    UNIXコマンドの「tarコマンド」についての質問です。 ファイルを絶対パスを用いてアーカイブをかけた場合、アーカイブファイルの展開時に、絶対パスで展開させず相対パスで展開させる方法がわかりません。 test.logを絶対パスを用いてアーカイブします。 %pwd /export/home %ls test.log %tar -cvf test.tar /export/home/test.log %ls test.log test.tar %rm test.log %ls test.tar このアーカイブファイルを別ディレクトリに移動 %mv /export/home/test.tar /export/home/test/test.tar 自身もディレクトリ移動 %cd /export/home/test %ls test.tar このような条件でアーカイブファイルの展開を実行 %tar -xvf test.tar %ls test.tar /export/home/testのディレクトリでは展開されず下記のように 絶対パスで指定したディレクトリに展開されます。 %cd /export/home/test %ls test.log インターネットで調べたところ %tar -xvf test.tar -C /export/home/test で実行すれば相対パスで展開できると記述があったのですが うまくできませんでした。 上記のコマンドで実行したところ得にはエラーは出ず メッセージが「tar:ブロックサイズ=4」と出て展開もされませんでした。 もしよろしければご教示願えませんでしょうか。 よろしくお願いいたします。

  • tarやcpioファイルを作成/展開するライブラリについて

    Linuxの勉強をしており、RPMファイルをCPIOに変換するコマンドがあることを知りました。 cpioファイルは基本的にtarと同じ扱いで書かれているサイトが多く、 使い方としては似ているというところまでは理解できました。 そこで気になったのですが、tarやcpioを作成するプログラムなどは存在するのでしょうか? 比較対象としてどうなのかというところもあるのですが たとえばzipを圧縮/展開するのにzlibなどがありますが、tarやcpioを扱うライブラリやAPIの情報をご存知の方いましたらご教授いただけますでしょうか?

  • tar でシンボリックファイルを除外

    こんにちは。 tarでディレクトリ以下のファイルをアーカイブする際に、シンボリックファイルを含めないということは可能でしょうか? 通常、シンボリックリンクされた先の情報はもちろんアーカイブされないのですが、シンボリックリンクがあるという情報そのものをアーカイブさせたくないのです。 なにかうまい方法はありますでしょうか。よろしくお願いします。

  • Linuxのディレクトリへのファイル展開

    Linuxのディレクトリへのファイル展開 クロスコンパイルなどで、debパッケージのツリー構造のままコピーしたいんです。 例えば、展開したdebパッケージの~/temp/usr/bin/xxxを~/arm/rom/usr/bin/xxxに コピーする。あるいは、ディレクトリが無ければ、ディレクトリごとコピーする なんてことが必要になりますが、これを自動処理することはできないでしょうか? あるいは、自動処理のMakefileを自動で作るとか