私のホームディレクトリには、次の構造のフォルダがあります。
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-tree
archive.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呼び出しにこのオプションを追加してください。