15

やりたいことは次のとおりです。

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 つのサブディレクトリの深さだけを調べ、枝刈りが完了したら、残りを 'tar' します。

難しいことではありません。パイプ (|) の前のビットは 100% 機能します。「tar」を除外すると、(画面に)求めているものが得られます。しかし、パイプとタールを含めると、「検索」で除外したすべてのものを含め、すべてがタールになります。

私はいくつかの異なる反復を試しました:

-print0 | xargs -0 tar rvf somefile.tar
-print0 | xargs -0 tar rvf somefile.tar --null --files-from=-
-print0 | tar cvf somefile.tar --null -T -

それで、私は何を間違っていますか?私は以前にこれをやったことがあります。でも今は白髪が増えるだけです。

4

6 に答える 6

6

一連のファイルをまとめて「tar」するために、以下の行のようなことをしたことを覚えています。グループ化したいファイルを特定したので、次のように実行しました。

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

あなたの場合、なぜもう一度すべてを含めているように見える -print の前に「-o」を実行しているのか疑問に思います。

于 2012-08-13T09:44:17.610 に答える
4

「検索」がディレクトリを返す場合、それらは「tar」に渡され、「検索」コマンドでの除外に関係なく、完全なコンテンツが含まれます。

したがって、「検索」に「-type f」を含める必要があると思います。

于 2013-03-20T16:48:07.160 に答える
0

私は前の 2 つのアプローチを組み合わせて使用​​します。1 日の作業をバックアップするには、次のようにします。

rm -rf new.tgz; find . -type f -mtime 0 | xargs tar cvf new.tgz;
于 2014-11-07T20:02:45.397 に答える