• ベストアンサー

tarで圧縮したファイルの解凍時の保存先指定

こんにちは、tarについてご教授ください。 tar czvf /home/hoge/test.tar.gz /home/hoge/testdir ↑の様に圧縮したとします。 これを同じ場所に解凍したいのです。 /home/hoge/test.tar.gz を /home/hoge/ のディレクトリの中から下記の様に解凍します。 tar zxvf /home/hoge/test.tar.gz すると、/home/hoge/home/hoge/testdir/ に解凍されてしまいます。 試しに tar zxvf /home/hoge/test.tar.gz / と言う感じに指定できたら、問題解決なんですが・・・これはできませんでした。 /に移動してからコマンドを発行ということも訳あってできません。 というのもPHPのプログラム上からsystemコマンドで圧縮と解凍をしているのですが、 解凍すると、PHPがあるディレクトリからの相対パスに解凍されてしまいます。 指定した場所に解凍するということはできませんでしょうか? tar --help でみてみたのですが、それらしきオプションは探せませんでした。 zipはまだ使ったことありませんが、こちらを使った方がサーバーへの負荷や扱いやすさでは上なのでしょうか? ご教授お願い致します。

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

  • ベストアンサー
  • lunarosa
  • ベストアンサー率73% (30/41)
回答No.4

通常のコマンドラインからは、ターゲットとなるディレクトリを相対パスでアーカイブすれば、皆さんがご回答しているように「-C」オプションで所望の結果を得ることができます。 > cd /home/hoge ; tar zcvf test.tar.gz testdir > tar zxvf test.tar.gz -C /home/hoge あるいはアーカイブ、および展開する際、絶対パスで扱うよう「-P」オプションを指定します。 > tar zcvf /home/hoge/test.tar.gz /home/hoge/testdir -P > tar zxvf /home/hoge/test.tar.gz -P

Antares
質問者

お礼

回答ありがとうございました。 -Cでエラーになっていたのは、記述する場所が悪かったようでした。 最後に-Cオプションを入れたらきちんと動作しました。 ありがとうございました。

その他の回答 (3)

  • gebageba
  • ベストアンサー率37% (12/32)
回答No.3

tar zxvf /home/hoge/test.tar.gz --directory=/home/hoge みたいのは?

Antares
質問者

お礼

-Cオプションでできたので、試しておりませんが、機会があったら試してみます。ご回答ありがとうございました。

  • Toshi0230
  • ベストアンサー率51% (836/1635)
回答No.2

展開先のディレクトリは指定しました? tar xzf /home/hoge/test.tar.gz -C / とか tar zx -C / -f /home/hoge/test.tar.gz とかでいけると思うんですが。 # Optionの順番変えているだけなんで書いてある内容は両者同じです

Antares
質問者

お礼

ご回答ありがとうございます。 これはやりました。その結果がNo1さんの回答の補足になります。

回答No.1

Cオプションでできませんか?

Antares
質問者

お礼

やっとできました。-Cの場所が悪かったみたいでした。 解凍したいファイルを記述した後にこのオプションを入れたらきちんと動作しました。 解凍したいファイル名の前にこのオプション入れたらエラーになります。 解決しました。ありがとうございました。

Antares
質問者

補足

やってみたのですが、エラーになってしまいました。 ヘルプでは下記の様に出てきます。 -C, --directory=DIR change to directory DIR エラーメッセージは下記です。 tar: -C: open 不能: そのようなファイルやディレクトリはありません tar: エラーを回復できません: 直ちに終了します tar: Child returned status 2 これは、圧縮時に指定するオプションでしょうか?

関連するQ&A

  • tarコマンドの圧縮

    こんにちは。 3ファイルある、ディレクトリ(test)を、tarコマンドでまとめて、 gzipコマンドにて圧縮しました。 そのあと、gzcatコマンドにて、展開して結果をファイルに おとして見たところ、余計なものが付加されます。 見たところ、ディレクトリ名が付加されている感じに、なっており、 出さないようにする方法があれば、教えてください。 【構成】 OS:HP-UX  ディレクトリ:test ファイル:test1(中身は,yuuuuuu 1行のみ) test2(中身は,xxxxxxx 1行のみ) test3(中身は,zzzzzzz 1行のみ) 【圧縮】  1・tarコマンド (tar cvf test.tar test/) 2.gzipコマンド(gzip test.tar) 【解凍】  1.gzcatコマンド(gzcat test.tar.gz > list) 【結果】 1.catコマンド(cat list) test/0040750000000000000000000104357767601770ustar00rootsys0000test/test1000644100000000000000013104364453400126510ustar00rootsys00000000000yuuuuuu test/test200644000000013104364453400126510ustar00rootsys000000000xxxxxxx test/test300644000000013104364453400126510ustar00rootsys000000000zzzzzzz

  • tar.gz圧縮のファイルサイズについて

    レンタルサーバCPIにて、 公開ディレクトのWebデータを圧縮してバックアップをとりたいと思い、 tar.gz圧縮のスクリプトを書いてcronで自動実行(1日1回)させています。 生成されたデータをみると、 公開ディレクトリのファイル数やフォルダ数は同じにも関わらず、 tar.gzの圧縮ファイルのファイルサイズが毎回異なっているのですがこれはtar.gzの仕様でしょうか? コマンドは下記となります。 tar -czf /usr/home/*****/webdata.tar.gz /usr/home/*****/html/; お分かりの方、ご教示頂ければと思います。 どうぞよろしくお願いいたします。

  • cronからtarで圧縮しようとすると、途中で終わってしまいます

    サーバーはCentOS 5.3です。 以下はroot権限での話です。 コマンドラインで /bin/tar cvzf /home/myhome/backup/var_backup.tar.gz /var と打ち、実行すると正しく圧縮されたファイルが出来上がります。 解凍してみても問題ありません。 大きさは700MBくらいになります。 ところが同じコマンドをCronにセットして実行すると、ファイルはできるのですが 254K というとても小さなファイルが出来上がって終わってしまいます。 解凍してみるととても中途半端なところで圧縮が終わっているみたいです。 5 0 * * * /bin/tar cvzf /home/myhome/backup/var_backup.tar.gz /var のように書いています。 rootのcrontabなので権限の問題ということも無いと思うのですが。 別のディレクトリでも試してみたのですが同じ結果でした。 別のサーバーで同じくCentOS5.3を使っていて、同じことをやっているのですが そちらはうまく行っているのです。 どなたか解決策などご存知でしたら教えてください。 同じような質問が過去にもあったようなのですが、未解決で終わっていました。

  • tar.gzのファイルの保存先はどこでしょうか?

    Ubuntu 11.04でデスクトップ上に置いてある[linux-wbfs-manager-0.1.12.tar.gz]をインストールしたいのですが、ターミナルにて tar zxvf linux-wbfs-manager-0.1.12.tar.gz と入力したのですがファイル名がありませんなどと表示されて保存場所が間違っていると思い質問させてもらったのですが、保存場所はデスクトップではなく他の場所に置かなくてはだめなのでしょうか?

  • tar.gzファイルが解凍できない

    さくらのレンタルサーバでCakePHPを動かそうとしています。 http://www.cafechantant.com/blog/2007/09/17/%E3%81%95%E3%81%8F%E3%82%89%E3%81%A7-cakephp/ こちらのサイトを参考にさせていただいて、wgetでcake_1.1.17.5612.tar.gzをダウンロードするところまでできました。 %tar zxvf cake_1.1.17.5612.tar.gz とすると Unrecognized archive format: Inappropriate file type or format と出ます。 %gzip -d ./cake_1.1.17.5612.tar.gz とすると、 %gzip: ./cake_1.1.17.5612.tar.gz: not in gzip format と出ます。どうすれば解凍できるでしょうか。

  • tar圧縮ファイルが作成できず困っています。

    tarとgzipをパイプでつなげて使用すると、tar圧縮ファイルが正常に 作成できず困っています。(Solaris) *やりたいこと* ファイル一覧test.txtに記載されているファイルを一度に tar圧縮したい。(tar・gzip別々でなく) *コマンドライン* # tar cvfp - -I test.txt | gzip -c > test.tar.gz a aaa.txt 1K a bbb.txt 1K a ccc.txt 1K # ls -l test.tar.gz(←とりあえずファイルは作られている) -rw-r--r-- 1 root other 33235 5月 12日 10:03 test.tar.gz # gunzip test.tar.gz(←unzipもできる) gunzip: /usr/bin/gzip has 2 other links -- unchanged # ls -l test.tar -rw-r--r-- 1 root other 64076 5月 12日 10:03 test.tar # file test.tar(←この時点でおかしい。file種別がアーカイブじゃない) test.tar: ELF 32-ビット MSB 実行可能 SPARC バージョン 1[動的にリンクされています][取り除かれています] # tar xvfp test.tar(←エラーになる) tar: ディレクトリの検査合計エラーです。 # /bin/tar xvfp test.tar(←違うtarでやってみるとエラーがでる) tar: This does not look like a tar archive tar: Skipping to next header tar: Archive contains obsolescent base-64 headers tar: Read 2636 bytes from test.tar tar: Error exit delayed from previous errors 上記のような現象になって困っています。パイプ以降をcompressに するとふつうにいけるので、gzipがおかしいような気もするのですが。 サイトを検索するとみなさんGNUのgtarをお勧めしているようですが そちらもだめでした。 どなたか解決策をご存知の方がいたらご教授願います。

  • tar.gzファイルの解凍

    FreeBSDを使用しています。 ダウンロードした AAA.tar.gz というファイルを解凍したいのですが、 gunzip AAA.tar.gz とすると、 gunzip: AAA.tar.gz: not in gzip format と出ます。 そこで、 file AAA.tar.gz とすると、 AAA.gz: GNU tar archive と出ました。 ですので、 tar xzvf AAA.tar.gz としてみましたが、以下のように出ます。 gzip: stdin: not in gzip format tar: Child returned status 1 tar: Error exit delayed from previous errors どのようにして解凍すればよいのかご教授いただけませんでしょうか?よろしくお願いいたします。

  • 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で恐縮ですが、もし、何か解決のヒントをお持ちの方がおられましたら、よろしくお願い致します。

  • Rubyを使っての tar.gz ファイルの解凍

    いつも、お世話になります。 今現在、cygwin環境下で、tar.gzファイルを解凍しています。 コマンドとしては、 gunzip -d xxxx.tar.gz tar -xvf xxxx.tar これを、Rubyを使って、やりたいと考えています。 方法は、あるのでしょうか? 元々、UNIX環境下で作成されたデータを、PC上のcygwinで解凍、ついでに テキスト処理(shellscript+perl)も実施しております。 gzファイル、tarを解くexeは、きっとどこかにあると思いますので、 rubyに期待するのは、外部コマンドとしての exeを実行できることです。 宜しく、サジェスチョンをお願いいたします。

  • dosコマンドでtarの解凍方法

    tar.gzのファイルをコマンドで解凍したいのですがエラーが表示され 解凍できません。 コマンドでの解凍は初めてなもので調べてみたのですが全くわからずで どうしたら解凍できるようになるか是非ご教授下さい!>< 解凍のコマンドを入力しエンターを押すと以下のエラーが表示されます。 'tar' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。 これはどうすれば解決できるのでしょうか? 何卒宜しくお願い致します。