4

UBUNTU と CENTOS で。

コンテンツに基づいて tar したいファイルがいくつかあります。

$ grep -rl "123.45" .

この種の形式で約 10 個のファイルのリストを返します。

./somefolder/someotherfolder/somefile.txt
./anotherfolder/anotherfile.txt

等...

それらすべてを tar.gz したい。

私は試した:

$ grep -rl "123.45" . | tar -czf files.tar.gz

うまくいきません。それが私がここにいる理由です。何か案は?ありがとう。

これを試してみたところ、Ubuntuでは機能しましたが、CentOSでは「tar: 02: Cannot stat: No such file or directory」が表示されます。

$ tar -czf test.tar.gz `grep -rl "123.45" .`

他の誰かがより良い方法を持っている場合は、私に知らせてください。上記のものは、少なくともUbuntuではうまく機能します。

4

3 に答える 3

9

このような:

 ... | tar -T - -czf files.tar.gz

「-T -」は、tar が標準入力からファイル名を読み取るようにします。2 番目のマイナスは stdin を表します。–</p>

于 2012-12-22T20:07:52.390 に答える
1
grep -rl "123.45" . | xargs tar -czf files.tar.gz
于 2012-12-23T19:10:52.977 に答える
0

Tar は、stdin を介してファイルの名前を指定するのではなく、処理するファイルを通知したいと考えています。

ただし、-T/--files-fromオプションがあります。だから私はそれを使用することをお勧めします。選択したファイルのリストを一時ファイルに出力し、次のように tar に読み取らせます。

T=$(mktemp)
grep -rl "123.45" . > $T
tar cfz files.tar.gz -T $T
rm -f $T

必要に応じて、シェル展開を使用して次のようにすることもできます。

tar cfz files.tar.gz -- $(grep -rl "123.45" .)

ただし、ファイルが多すぎる場合、またはファイルのいずれかに奇妙な名前 (スペースなど) が含まれている場合は失敗します。

于 2012-12-22T20:07:33.950 に答える