• 締切済み

tarを使用してのファイルコピーについて

以下の2種類のコマンドは同じ事をしているように思うのですが、 tarを使用する利点は何かあるのでしょうか? ディレクトリの場合はtarを使用する利点はあると思うのですが、 ファイルの場合何かあるのかなと思い質問させていただきました。 1,  tar cf - foo.backup | (cd /mnt/NAS/backupdir; tar xf -) 2,  cp foo.backup /mnt/NAS/backupdir

みんなの回答

回答No.5

属性も含めてごっそりコピーしたいとき、cp -p を利用するのですが コピーしたいファイルの所有者等が違う場合、話が変わってきます。 cp -p では、所有者も元のままですが tar や pax を利用してコピーした場合 所有者等はすべて実効ユーザーになります。 cp -p してから chown -R してもよいのですがね。 Linuxではそれもままならないので、tarを使用することはよくあります。 というか、cp -p をあまり使わないです。個人的には。。。 # 前述の通り、パーミッションの関係でふべんなんで。

  • notnot
  • ベストアンサー率47% (4846/10257)
回答No.4

現状では、cp -p と差が無いというのはおっしゃる通りだと思います。 tar の -C オプションを使わずサブシェルで cd している事からしても、No3の方の通り、古くから使っているスクリプト、ないし、古いスクリプトをまねたスクリプトだと思います。

noname#208507
noname#208507
回答No.3

> 普段使用しているファイルコピーのスクリプトで、 そのスクリプトは、歴史が長いのではないでしょうか? だとすれば、移植性を高めるためだと思います。 現在はかなり淘汰されましたが、UnixライクのOSは数多く存在しました。たとえば Minix ver.1.5 の cp コマンドには、何とオプションが1つもありません(それでも tar コマンドは存在します)。このような環境でも使えるよう考慮して作られているのでしょう。

  • unacyo
  • ベストアンサー率51% (35/68)
回答No.2

tarを使ったのは大分前なので、記憶が定かではないのですが、ANo1さんの言う日付の他にも、ファイル属性とか、ユーザーグループ/idも復元していたと思います。 cp -pが何か判りませんが、これらをコピーするならば、同じに感じますね。

qwer0216
質問者

お礼

ご回答ありがとうございます。 pオプションはオーナー、グループ、パーミッション、タイムスタンプを保持したままコピーですね。 私が作成したものではないのですが、普段使用しているファイルコピーのスクリプトで、わざわざtarを使ってシェルを書いていたので気になってしまったんですよね。。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

日付?

qwer0216
質問者

お礼

ご回答ありがとうございます。 ということは、cpにpオプションが付いていた場合、やはり結果としては特に違いはないんでしょうか?

関連するQ&A

  • CPコマンドでファイルがコピーできない

    こんにちは。 UNIX上でCPコマンドを使用したのですが、 以下のエラーが発生している為にコピーが出来ません。 大変申し訳ございませんが、 解決方法をアドバイスして頂けますよう よろしくお願い致します。 (実施コマンド) cp -f /oradata/db_FB-RT-D1.tar.gz /mnt/smb/db_FB-RT-D1_2006-12-06_Wed.tar.gz ※/oradata/db_FB-RT-D1.tar.gzの状態です。 -rw-r--r-- 1 root root 3284833199 12月 6 04:42 db_FB-RT-D1.tar.gz 実施ユーザは以下のコマンドでクーロンに設定して行いました。 file_copy.shの中に『cp -f /oradata/db_FB-RT-D1.tar.gz /mnt/smb/db_FB-RT-D1_2006-12-06_Wed.tar.gz』コマンドが あります。 su - root -c "/backup/bin/file_copy.sh"

  • solaris上のディレクトリをwindows diskへrshでtarファイルとして保存したい

    solaris上のディレクトリをwindowsからrshでtarを実行して直接windows上のフォルダにtarファイルとして保存したいのですが、コマンドが不明で困っております。 過去ログ(http://oshiete1.goo.ne.jp/kotaeru.php3?q=1139234)の#1さんの回答にあったコマンドがうまくいきません。 solaris8(Ultra-5)  ホスト名 solAAA  バックアップしたいディレクトリ /home/hogehoge windows2000proSP4  ホスト名 winBBB  保存先 C\TEMP  保存する際のtarファイル名 backup.tar コマンドプロンプトでC\TEMPにcd後、実行したいと考えております。 ちなみに↓のコマンドは正常動作を確認しております。  rsh solAAA -l root "ls -lap /" どなたか↓のコマンドの誤っている個所と、解説をお願い致します。  rsh solAAA -l root "tar cf - -C /home/hogehoge . > backup.tar" rshはsolAAA上で実行されるので、winBBBの指定がどっかに必要のような。。。 根本的にこのようなことは不可能でしょうか。

  • 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行でできる良い方法があれば教えて下さい。 # そもそも【前提】が私の思い込みかもしれないので、 # 「違うよ」という指摘があればお願いします。

  • 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の互換性

    AIX5.3で、tarを使用してファイルを4mmDATにバックアップしました。そのbackupした4mmDAT tapeをRedHat Linux AS4上のDATドライブに装填し、tape上のファイルを、Linux上のファイルシステムにextractしたいのですが、どのようにすればよろしいでしょうか。 AIXで実行したコマンドは下記の通りです。 # cd /home/xxxxx-user/data # tar cvf /dev/rmt0 *.*

  • tarコマンドで

    ログインしたユーザーのホームディレクトリがカレントディレクトリで、 tar -cvf /dev/hda . というコマンドを実行した場合は、ユーザのホームディレクトリのすべてのファイルを新しくアーカイブしてhdaに書き出すという意味で良いのでしょうか?

  • cgywinでのtarコマンド

    初歩的な質問で申し訳ございません。 調べてみたのですが、 どうしても解決できないので お知恵をお貸しください。 cgywinをlftp利用のためwin7に導入し、 該当サーバ上にあるディレクトリ丸ごとをtarで固めて ローカルに持ってきたいのですが、 lftpでtarコマンドを使用すると 「unknown command 'tar'」 と、tarコマンド知りませんとエラーが出てしまいます。 システム変数に cgywinのbinのpathは追加しており、 あとはどうすればいいのかわかりません。。 教えてください。。

  • Linuxのtarコマンドについて

    Linuxのtarコマンドについてわかる方がいれば教えてほしいです。 (tarコマンドというよりはLinuxの仕様かもしれません) Linuxで以下①パターンと②パターンでコマンドを実行したときに 指定の仕方でtarファイルの作成されるディレクトリが違うのですが なぜでしょうか。 Linux初心者なので詳しく教えていただけると助かります。 共通(前準備 (#はプロンプトです)) # DIR=/tmp/hoge/2021 # ls -l ${DIR} ~ test1.txt ~ test2.txt ~ test3.txt # cd ${DIR} ①パターン # tar -cvf ${DIR}.tar ./* (アスタリスクです) # ls -l /tmp/hoge ~ 2021.tar ⇒/tmp/hoge配下にtarができる ②パターン # tar -cvf 2021.tar ./* (アスタリスクです) # ls -l /tmp/hoge ~ 2021.tar ⇒/tmp/hoge/2021配下にtarができる

  • Solaris10ファイルコピーの失敗

    Solaris10(X64)環境に於けるトラブルについて教えてください。 ある時、定期的に取っているバックアップファイル(tarファイル) が解凍できなくなっていることに気づきました。 調べてみると、解凍できないのは『比較的大きなファイルをコピー する(数Gバイト)と、コピー元とコピー先が異なる(ファイルが壊れ る。)』ことによることが判りました。 例えば、次のコマンドです。 cp /export/.../backup/2012_08_30_f.tar . cmp -l /export/.../backup/2012_08_30_f.tar ./2012_08_30_f.tar 8244928138 241 201 1.上の例で使用する『2012_08_30_f.tar』は16Gバイトの容量があ ります。 2.上の例にもあるとおり、必ず第5ビットの"1"が"0"になってしま います。これまで何度も試しましたが、例外はありません。 3.ファイルコピー実行中にコンソールウインドウや "/var/adm/messages"ファイルにエラーもワーニングも発生しま せん。 4.format -> analyze -> read コマンドによるディスクの走査も行 いましたが、エラーは見つかりません。 5.容量の小さなテキストファイルのコピーもいつも行っています が、問題が発生したことはありません。 6.このパソコンはディスクを2台使用していますが、どちらのディ スクでも同じ問題が生じるようです。 原因はディスクではなく、マザーボード、CPU、メモリなど、他の ハードウエアにあるのではないかと考えていますが、全く調査方法 が判りません。 皆さんのアイデアをお寄せください。

  • tarコマンドでDATをフルに使うには

    EWS450上でtarコマンドによるDATへのバックアップをしようとしたのですが、うまくいきません。 tar -cvf /dev/rsmt/c1t4d0hn /home/backup/* これを実行すると非圧縮時12GB入る筈のDATなのに1GB近くでコマンド実行が中断されてしまいます。バックアップ対象は3GB前後なので十分入る筈なのですが……? 今度は/etc/default/tarファイル内のarchive0の行を archive0=/dev/rsmt/c1t4d0hn 12000000 20 として tar -cv 0 /home/backup/* として実行してみるつもりなのですが、これでうまくいくのでしょうか?いかない場合はどうするべきでしょうか? man tarによれば-rオプションで新規作成ではなく追加記入モードに出来る(ただし8mm、CGMTでは不可)との事なのですがDATだと出来ないので一括してやるしかなく、結局無駄に時間ばかりかかってしまっています。