お知らせ

  • 利用規約を守って投稿してください。また、よくある質問および投稿の手引きも参照してください。
  • メッセージの投稿にはアカウントが必要です。未登録の方は、ユーザ登録ページからアカウントを作成することができます。

#1 2017-12-23 12:14:22

av7y6unm
メンバ
登録日: 2008-12-17

tarでの除外オプションの扱いについて

いつもお世話になります。
Lubuntu 16.10上でtar+bzip2で特定のフォルダを圧縮しようとしました。
たとえば,tartestフォルダには以下のようにファイルがあります。
tartest/a
tartest/b
tartest/c
ここで,ファイルcを除外してtartest以下をtartest.tar.bz2にアーカイブ+圧縮しようとして以下のように入力しました。

コード:

$ tar cjvf tartest.tar.bz2 tartest --exclude c
tartest/
tartest/a
tartest/c
tartest/b
$

となり,除外されないのです。同様のコマンドラインでUbuntu上では

コード:

$ tar cjvf tartest.tar.bz2 tartest --exclude c
tartest/
tartest/b
tartest/a
$

となり,除外されます。同じUbuntu系OS上のtarでこのように挙動が違うのは,なぜでしょうか。

オフライン

 

#2 2017-12-25 18:03:00

rin
メンバ
登録日: 2009-10-25

Re: tarでの除外オプションの扱いについて

はじめまして。

この問題は私だけかと思っていたのですが、やはりexcludeが効かないですよね。
検索して調べてみると「除外されない場合はこうすればできる」と書いてある
サイトもあるのですが、除外できません。

今はDebianのstable(安定版)を使っているのですが、excludeで除外できません。
現在のstableがtesting(テスト版)だった頃(去年くらいだったような…)のアップデートで、
除外されなくなってしまい困ったことがありました。
そのうち修正されるだろうと思っていたのですが、未だにダメです。

とりあえず、除外分は別フォルダに移動させるなどの対処をした方がよいと思います。
解決策でなくて申し訳ございません。

Debianから派生したものという意味では、Lubuntuの方が正常(?)なのでしょうか。
Ubuntuは何らかの修正をされているのだろうと思います。

オフライン

 

#3 2017-12-25 21:48:26

av7y6unm
メンバ
登録日: 2008-12-17

Re: tarでの除外オプションの扱いについて

rinさん,こんにちは。
コメントありがとうございます。
私の環境固有の現象ではなかったのですね。
その後,いろいろと試して,Lubuntu上のtarでは以下のようにexcludeオプションをターゲットディレクトリの前に持ってくることで,望み通りの動作をさせることができました。
これだと一見cとtartestが除外されるように見えるのですが,excludeはきっと1つのパラメータだけ有効なんでしょうね。
シェルのワイルドカード展開があると変な動作をするかもしれません。

コード:

$ tar cjvf tartest.tar.gz2 --exclude c tartest
tartest/
tartest/a
tartest/b
$

ご参考になれば,幸いです。

オフライン

 

#4 2017-12-26 01:31:49

rin
メンバ
登録日: 2009-10-25

Re: tarでの除外オプションの扱いについて

お教えいただき、ありがとうございます。
testingだった頃に失敗したので、ダメだったので諦めていました。
現在はstableですが、試したところ

$ tar cjvf tartest.tar.gz2 --exclude c tartest
tartest/
tartest/a
tartest/b
tartest/c

…やはり私の環境に問題があるのでしょう。
( tar 1.29b-1.1 amd64 )

tarを削除して snapshot.debian.org から最新版入手し、
差替えたらうまくいきました。

$ tar cjvf tartest.tar.gz2 --exclude c tartest
tartest/
tartest/a
tartest/b

※ tarを削除しようとすると依存関係で警告がでます。
強制削除して差替えたので、手こずりました。

差替え後も、下記では c が除外されないことは変わりませんでした。
$ tar cjvf tartest.tar.bz2 tartest --exclude c
tartest/
tartest/a
tartest/b
tartest/c

解決にならないコメントで、av7y6unm様にはご迷惑であったことと思います。
お詫び申し上げます。

オフライン

 

#5 2017-12-27 11:54:13

nobuta
新しいメンバ
登録日: 2009-07-17

Re: tarでの除外オプションの扱いについて

tar の man page によると

> tar [-] A --catenate --concatenate | c --create | d --diff --compare |
>          --delete | r --append | t --list | --test-label | u --update | x
>          --extract --get [options] [pathname ...]

となっていて [options] は [pathname ...] の前になくてはいけません。

また --exclude option は

> --exclude=PATTERN
>            exclude files, given as a PATTERN

となっていて = が必要なようです。

オフライン

 

#6 2017-12-28 22:45:39

STGSAGWAN
ゲスト

Re: tarでの除外オプションの扱いについて

av7y6unm による投稿:

その後,いろいろと試して,Lubuntu上のtarでは以下のようにexcludeオプションをターゲットディレクトリの前に持ってくることで,望み通りの動作をさせることができました。

自分なりにググって調べてみたのですが、
どうもtarがv1.29から、オプションの指定位置による解釈が少し変わったみたいです。
憶測ですがそのLubuntu 16.10のtarは1.29以降で、Ubuntu 16.10のそれは1.28以前かもしれません。(調べてないので適当です)
なので、v.1.28にダウングレードするか、オプションの位置を変えるか、どちらかでしょう。
「tar exclude 1.29」とかでググるとそれらしき情報は出てくるようです。

 

#7 2017-12-28 23:02:42

rohizuka
メンバ
登録日: 2009-06-25

Re: tarでの除外オプションの扱いについて

av7y6unm による投稿:

同じUbuntu系OS上のtarでこのように挙動が違うのは,なぜでしょうか。

Lubuntu 16.10のtarとubuntu 16.04のtarを較べておられていませんか?

オフライン

 

Board footer

Powered by FluxBB