tarが多すぎる除外

tarが多すぎる除外

/でtarを実行するときに「/usr/sbin」を除外せずに「/sbin」を除外するにはどうすればよいですか?

tar --exclude=dir一部の詳細:通常、tarの現在の作業ディレクトリに表示される「dir」とそのサブフォルダのみを除外することが許可されています。

私はこの見解を裏付ける文書を見つけることができず、実際にそれが偽であることを発見しました。私は古代のSuSE、いくつかのCentOS、そしてDebian(LennyからJessieまで)を使ってテストしています。tar --exclude=dir「dir」を除外してください。どこでも構わないそれを発見!

概念の証拠:

cd /tmp
mkdir -p dira/dirb/{a,b,c,d,e}
mkdir -p dirc/dira/{a,b,c,d,e}
tar c dir? | tar t

作成したtar "ファイル"の中に、作成した各ディレクトリが表示されます。それは問題ではありません。しかし、一緒に:

tar c dir? --exclude=dira/* | tar t

出力は次のとおりです

dira/
dirc/
dirc/dira/

内容ではなくディレクトリ自体を除外する場合も同様です。

tar c dir? --exclude=dira | tar t

以下を提供します。

dirc/

それは私が望むものではありません! 「dira/を除外したい。「しかし、「dira /」は除外されません。dira自体が別のディレクトリのサブフォルダーの場合。

タグ付きの一部のファイルを "dira" に入れると役に立ちますが、そうすることができない場合もあります。たとえば、バックアップユーザーに除外されたディレクトリへの書き込み権限がない場合、またはディレクトリが変更されないことが重要な場合。

答え1

Gnu tarを使用している場合は、ここに広範なマニュアルがあります。こここの--anchoredオプションについて議論し、除外されたパターンと含まれているグローバルパターンがどのように異なるかを説明します。あなたは試すことができます:

tar c dir? --anchored --exclude=dira | tar t

答え2

残念ながらtarこれは事実ではありません。みんなファイル名(サブディレクトリまたは親ディレクトリを含む)を選択し、部分一致を検討します。やりたいことは不可能です。ただアスファルト。

幸いなことに、UNIXシステムを使用しているので、個々のコマンドだけでなくツールボックス全体を自由に使用できます。次の操作を実行できます。

find . -print | grep -v '^\./dira' | xargs -d '\n' tar cf ../output.tar

1つ目は現在のディレクトリのすべてのファイル名を印刷し、2つ目はファイル名に正規表現を使用して不要なファイル名をフィルタリングします。この正規表現の文字は^一致を保証します。ただ次のファイルに有効です。スタート残りの正規表現(たとえば、ディレクトリdiraとそのファイルまたはサブディレクトリ)と一緒に使用します。パイプラインの最後のコマンドは、最初の2つのコマンドの出力を読み取り、それをtarのコマンドラインに変換して、アーカイブに追加するファイルのリストをtarに提供します。

答え3

/sbinのみを除外しようとすると、/usr/sbin除外が表示されるのはなぜですか?
man tar:(http://linux.die.net/man/1/tar)見せてください:

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

DIRではありませんが、PATTERNで、/sbinは/usr/sbinと一致します。

これに対してできることは、除外されたDIRにDIRを含めることです。
まずtarを実行し、/ sbinを除いて(/ usr / sbinも除く)、出力をarchive.tarファイルに送信してから、APPENDオプションを使用してarchive.tarファイルに/ usr / sbinを追加します。

tar -cf archive.tar / --exclude=/sbin #### Partial Contents
tar -Af archive.tar /usr/sbin #### Contains everything you want

関連情報