オプションで除外するように指示されたサブディレクトリを除外しないこと_data.tar
を除いて、正常に実行する(つまりファイルを生成する)bashスクリプトにこの非常に単純な行があります:--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のバグ(GNU tar 1.23、CentOS 6.2、Linux 2.6.32上)であるか、空白やその他の見落としやすいタイプミスに対するtarの「極度の感度」であるかを問わず、これはバグだと考えます。今のところ。
これは恐ろしいことです:私は以下に示す洞察を試しました(末尾なし/*
)が、実動スクリプトではまだ機能しません:
/bin/tar -cf /home/_data.tar /data --exclude='/data/sub1' --exclude='/data/sub2' --exclude='/data/sub3' --exclude='/data/sub4'
私が試したものと@Richard Perrinが試したものの間に違いは見られません。ただし、引用符と1の代わりの2つのスペースを除きます。これを試します(バックアップするディレクトリとして夜間スクリプトが実行されるのを待つ必要があります)アップは巨大です)と報告します。
/bin/tar -cf /home/_data.tar /data --exclude=/data/sub1 --exclude=/data/sub2 --exclude=/data/sub3 --exclude=/data/sub4
私はこれらのすべてのtar --exclude
感度がタールではなく私の環境の何かであると考え始めていますが、それでは何ができるでしょうか?
動いた!試した最後のバリエーション(--exclude
sの間に二重引用符と二重引用符の代わりに単一引用符なし)をテストしました。奇妙だが受け入れる。
信じられない!tar
(1.15.1)の古いバージョンは、最上位ディレクトリがコマンドラインの最後にある場合にのみ除外されることが判明しています。これは、バージョン1.23が必要とする方法の正反対です。ご参考までに。