tar を使用する場合、ディレクトリを除外することはできません。

tar を使用する場合、ディレクトリを除外することはできません。

私のホームディレクトリには、次の構造のフォルダがあります。

top-tree
+-- .git
+-- branch1
|   +-- branch11
    |   +-- .idea
    |   +-- branch111
    |   +-- branch112
    |   +-- branch113
    |   +-- branch114
        |   +-- branch1141
        |   +-- branch1142
        |   +-- branch1143
    |   +-- branch115
    |   +-- branch116
    |   +-- branch117

これで、コンテンツ全体を圧縮したいが、など.gitの隠しディレクトリ.ideaと、少なくとも2つのサブディレクトリを持つ1つの特定のディレクトリを除外する必要がありますbranch114(サブディレクトリの数は随時変更される可能性があります)。

次のパラメータでtarコマンドを使用してこれを実行しようとしました。

tar -czvf archive.tar.gz --exclude=~/top-tree/branch1/branch11/branch114 --exclude=~/top-tree/.git --exclude=~/top-tree/branch1/branch11/.idea top-tree/

tar -czvf archive.tar.gz --exclude=~/top-tree/branch1/branch11/branch114 --exclude=~/top-tree/.*

しかし、上記のどれもうまくいかないようです。表示されるたびに、フォルダの内容全体はtop-treearchive.tar.gz に保存されます。私はたくさん試しました(ここで引用するには多すぎます。これ1)本ウェブサイトおよびその他のウェブサイトでの提案、使用パラメータの配列など。しかし、他の同様の質問とは異なり、私の問題はパスの問題のようです。私が使用しているtarのバージョンは1.29です。なぜこれがうまくいかないのですか?

答え1

フォームパスをアーカイブし、フォームパスを除外しています。除外パターンはどんなものとも一致しません。top-tree/stuff/home/skrowten/top-tree/stuff

簡単な解決策は

tar -czvf archive.tar.gz --exclude=top-tree/branch1/branch11/branch114 --exclude=top-tree/.git --exclude=top-tree/branch1/branch11/.idea top-tree

たとえば、aがある場合、top-tree/subdir/top-tree/.gitこの項目も除外されます。これを防ぐ1つの方法は、開始コマンドラインパスを使用し、その./パスがルートディレクトリにのみ表示されるという事実に依存することです。.

tar -czvf archive.tar.gz --exclude=./top-tree/branch1/branch11/branch114 --exclude=./top-tree/.git --exclude=./top-tree/branch1/branch11/.idea ./top-tree

./リードするのが面倒な場合は、--transform='s!^\./!!'tar呼び出しにこのオプションを追加してください。

関連情報