tar --exclude は除外されません。なぜ?

tar --exclude は除外されません。なぜ?

bashスクリプトには、以下を除いて正常に実行される(つまりファイル生成_data.tar)非常に単純な行があります。いいえオプションから除外するサブディレクトリを除外します--exclude

/bin/tar -cf /home/_data.tar  --exclude='/data/sub1/*'  --exclude='/data/sub2/*' --exclude='/data/sub3/*'  --exclude='/data/sub4/*'  --exclude='/data/sub5/*'  /data

_data.tar代わりに、除外したいサブディレクトリのファイルを含む、/ dataの下のすべての内容を含むファイルを作成します。

理由をご存知ですか?この問題を解決するには?

修正する私は以下の最初の答えに与えられたリンクに基づいて観察を実装しました(最上位ディレクトリから、最後に除外した後に空白なし)。

/bin/tar -cf /home/_data.tar  /data  --exclude='/data/sub1/*'  --exclude='/data/sub2/*'  --exclude='/data/sub3/*'  --exclude='/data/sub4/*'  --exclude='/data/sub5/*'

しかし、これは役に立ちません。すべての「除外された」サブディレクトリが結果_data.tarファイルに表示されます。

これは謎です。これが現在tar(CentOS 6.2のGNU tar 1.23、Linux 2.6.32)のバグなのか、空白や他の簡単に見逃せるタイプミスに対するtarの「極度の感度」なのか、私はこれがバグだと思います。現在。

これは怖すぎる:以下に提案された洞察力を(後続せずに/*)試しましたが、まだ本番スクリプトでは機能しません。

/bin/tar -cf /home/_data.tar  /data  --exclude='/data/sub1'  --exclude='/data/sub2'  --exclude='/data/sub3'  --exclude='/data/sub4'

引用符と1の代わりに2つのスペースを除いて、私が試したものと@Richard Perrinが試したものとの間に何の違いも見られません。私はこれを試してみて(サポートするディレクトリが大きいので、夜間スクリプトが実行されるのを待つ必要があります)、もう一度報告します。

/bin/tar -cf /home/_data.tar  /data --exclude=/data/sub1 --exclude=/data/sub2 --exclude=/data/sub3 --exclude=/data/sub4

私はすべてのtar --exclude感度がタールではなく、私の環境にあるものだと思い始めました。しかし、それは何ですか?

効率的!試した最後のバリアント(シングルクォートなしとsの間にダブルスペースの代わりに単一のスペース--exclude)が機能するかどうかをテストしました。変ですが受け入れ可能です。

信じられない!tar以前のバージョン(1.15.1)では、最上位ディレクトリが次の場合にのみ機能することがわかりました。最後コマンドラインから。これはバージョン1.23で要求されるものとは正反対です。参考用。

ベストアンサー1

そのバージョンでは、コマンドの先頭にオプションを配置する必要がtarあるかもしれません。--excludetar

望むより:https://stackoverflow.com/q/984204

tar --exclude='./folder' --exclude='./upload/folder2' \
    -zcvf /backup/filename.tgz .

望むより:http://mandrivausers.org/index.php?/topic/8585-multiple-exclude-in-tar/

tar --exclude=<first> --exclude=<second> -cjf backupfile.bz2 /home/*

選択する:

EXCLD='first second third'
tar -X <(for i in ${EXCLD}; do echo $i; done) -cjf backupfile.bz2 /home/*

別のtarコマンドプロンプトは次のようになります。ここ:

tar cvfz myproject.tgz --exclude='path/dir_to_exclude1' \
                       --exclude='path/dir_to_exclude2' myproject

おすすめ記事