2012-07-18 9 views
9

タール:剪定が行われた後
find . -maxdepth 6 (-name *.tar.gz -o -name bediskmodel -o -name src -o -name ciao -o -name heasoft -o -name firefly -o -name starlink -o -name Chandra) -prune -o -print| tar cvf somefile.tar --files-from=-
タールアップ残りの部分を、その後、すなわち、ものの全体の多くを除外するだけで6つのサブディレクトリの深さに見える、と。xargsのを見つけると私は私がやりたい次いる

難しくありません。パイプ(|)の前のビットは100%動作します。私がタールを除外した場合、私は(スクリーンに)後ろのものを取得します。しかし、パイプとタールを入れると、それは私が見つけたばかりのものを含めて、すべてをタールします。

多くの異なる繰り返しを試しました。
-print0 | xargs -0 tar rvf somefile.tar
-print0 | xargs -0 tar rvf somefile.tar --null --files-from = -
-print0 | tar cvf somefile.tar - null -T -

どうしたのですか?私はこれを前にした。今は灰色の毛を私に与えているだけです。

+0

私はあなたの前に 'find' – drevicko

答えて

5

私は以下のようなファイルをまとめてタイルすることを覚えています。私は私がグループにしたいファイルについて特異的であったので、私はあなたの場合には、この

find . -name "*.xyz" | xargs tar cvf xyz.tar; 

のようなものが走ったあなたは再びすべてを含めているように見える-print前に「-o」をやっている理由を、私は不思議

+4

に渡さ' bash'によって展開ばかり、それを避けるために、 '* .tar.gz'引用符で囲む必要があると考えているが私を修正しますmが間違っていますが、 'find'によって出力されるファイルがたくさんある場合、' xargs'はファイルリストのサブセットで 'tar'を複数回実行します。残念なことに、 '-c'は直前のtarファイルを上書きし、最終的なtarファイルの最後のロットのみを取得します。 – drevicko

+0

あなたはそれを試すことができます。私は7-8ファイルのtarファイルを得ました。これはfindを使って検索しました。ここで何が起きるかは、findの出力を出力し、xargsはそれらをtarファイルに送ります。 – rajshenoy

+2

@jajshenoy 7-8ファイルはおそらくこの問題を明らかにするには不十分です。 [このページ](http:// offbytwo。)の「最大コマンド長」セクションを参照してください。com/2011/06/26/things-you-didnt-know-about-xargs.html)。試してください 'エコー| xargs --show-limits'を実行すると、xargsが使用しているコマンドラインバッファーのサイズを見ることができます。私にとっては131072です。それはかなり大きいですが、数千のファイルがあればすぐに使い果たしてしまいます。 – drevicko

3

findがディレクトリを返す場合、それらはtarに渡され、findコマンドの除外にかかわらず完全な内容が含まれます。

だから、あなたは "-type f"を検索に含める必要があると思います。

13

私にとっては、findの-printフラグとtarコマンドの--files-fromの組み合わせが役に立ちました。私の場合、5000以上のログファイルをタールする必要がありますが、xargsを使用するだけで、結果のファイルに500個のファイルが与えられます。

find . -name "*.pdf" -print | tar -czf pdfs.tar.gz --files-from - 

あなたが「--files-から= - 」を持って、あなただけの「--files-から - 」したい場合は、その後、私はあなたが必要だと思う - CVFの前に、以下のように。私は上記の2つのアプローチの組み合わせを使用

find . -maxdepth 6 (-name *.tar.gz -o -name bediskmodel -o -name src -o -name ciao -o -name heasoft -o -name firefly -o -name starlink -o -name Chandra) -prune -o -print| tar -cvf somefile.tar.gz --files-from - 
+2

'--files-from -'を使うと、不完全なアーカイブとなるxargsの制限(@ rajshenoyの例のコメントではっきりしない)の問題を避けることができるので、これは正しい解決策です。 –

0

- バックアップに私はこれを行う一日の仕事します。rm -rf new.tgzを。見つける。 -type f -mtime 0 | xargs tar cvf new.tgz;

0

オプションを指定せずにファイルを使用することは、私のためにのみ有効にすることでした。他のすべてのオプションには、生成されたリストではなくディレクトリ内のすべてのファイルが含まれていました。

これが私の解決策だった:私は「場合

find . ! -name '*.gz' -print | xargs tar cvzf ../logs.tar.gz --files-from 
関連する問題