tarファイルの中から、あるファイルを除いて再度 tarで固め
たいと思っています。どのように処理するのがスマートでしょ
うか?
(例)
foobar.tgz には以下のファイルが含まれています。
foo/abc/b.jpg
foo/abc/c.jpg
foo/bar/a.jpg
foo/bar/b.jpg
foo/bar/c.jpg
foo/def/ghk/a.jpg
foo/def/ghk/c.jpg
foo/a.jpg
foo/c.jpg
foo/other/test1.txt
foo/other/test2.txt
この中から
"c.jpg" という名前のファイルと foo/other/ ディレクトリ
を除いた tar ファイルを作り直します。
今は下記のような感じでやっているのですが、それぞれの
ファイルがでかいので、もっと要領よくできないかなと思っ
ています。
よりスマートな方法があればご教示ください。
tar xzvf foobar.tgz
find foo -name "c.jpg" | xargs rm
rm -rf foo/other
tar czvf new.tgz foo
#もしくは tar ファイル中のファイルを削除するような
#ツールは無いでしょうか?
--
Tanaka-Qtaro-Yasuhiro mailto:ta...@ca2.so-net.ne.jp
http://www.linux.or.jp/JM/html/GNU_tar/man1/tar.1.html
にある、 --delete オプションでできませんかねぇ?
tar -zf foobar.tgz c.jpg foo/other/
みたいな感じかな?(↑動作未確認!!)
tar -zf --delete foobar.tgz c.jpg foo/other/
かな?
名称不定さんの<bvteh3$b5e$1...@news511.nifty.com>から
>http://www.linux.or.jp/JM/html/GNU_tar/man1/tar.1.html
>
>にある、 --delete オプションでできませんかねぇ?
おお、そんなオプションがあったんですね。
私が使っている GNU tar 1.13.25 では、圧縮のかかった tarファイル
に --deleteオプションをかけようとすると、
$ tar --delete -zf foobar.tgz foo/other */c.jpg
tar: Cannot update compressed archives
tar: Error is not recoverable: exiting now
というエラーが出て削除できませんでした。ですので、
$ zcat foobar.tgz | tar --delete */c.jpg foo/other | gzip > new.tgz
とすることでうまいこといきました。
かなりスマートになりました。どうもありがとうございました。
--
Tanaka-Qtaro-Yasuhiro mailto:ta...@ca2.so-net.ne.jp
> $ tar --delete -zf foobar.tgz foo/other */c.jpg
> tar: Cannot update compressed archives
> tar: Error is not recoverable: exiting now
>
> というエラーが出て削除できませんでした。ですので、
>
> $ zcat foobar.tgz | tar --delete */c.jpg foo/other | gzip > new.tgz
>
ちょとだけおせっかいですが、*/c.jpgはquoteして上げた方が良いでしょう。
--
___ わしは、山吹色のかすてーらが大好きでのぅ
[[o o]] ふぉっふぉっふぉ
'J' 森下 お代官様 MaNMOS 英夫@ステラクラフト
PGP Finger = CD EA D5 A8 AD B2 FE 7D 02 74 87 52 7C B7 39 37