2

ここにいる誰かが何が起こっているのか知っているかもしれないと考えましたが、基本的に私がしなければならないことは、ディレクトリを取得し、2 レベル下のサブディレクトリ (root/1/2) を省略して tar ファイルを作成することです。多数のプラットフォームで動作する必要があることを考えると、私が考えた最も簡単な方法は、そのディレクトリを検索して egrep することでした。これはうまく機能し、ファイルのリストを取得します。

しかし、そのファイル リストをxargs tar rvfコマンドにパイプすると、結果のファイルは 33 GB のようなものになります。検索をファイルに出力しようとしましたがtar -T、そのファイルを入力として使用すると、ディレクトリ全体のストレート tar を (何も省略せずに) 実行すると、約 33 GB になります。 d 6-ish GB でそれを期待します。

何が起こっているのかについて何か考えはありますか?または、これを修正する方法は?私は本当にこれを理解する必要があります.ファイルのリストをフィードすることと、単にディレクトリをtarすることと関係があると思いますが、それを修正する方法がわかりません.

4

2 に答える 2

0

ファイルリストでディレクトリを指定するtarと、ディレクトリとその中のすべてのファイルがパッケージ化されます。次に、ディレクトリ内のファイルを個別にリストすると、ファイルが(再び)パッケージ化されます。サブディレクトリを一覧表示すると、各サブディレクトリの内容が再度パッケージ化されます。等々。

ファイルリストを作成する場合は、それが本当にファイルのリストであり、ディレクトリが含まれていないことを確認してください。

find . -type f ...

省略記号はfind、サブディレクトリ内のファイルを削除するためのオプションである場合もあれば、grep -vそれらを削除するためのオプションである場合もあります。-name通常、名前の最後のコンポーネントにのみ一致することに注意してください。GNUfindには! -path '*/subdir/*'、名前だけでなくパスに基づいてファイルを削除できるバリアントがあります。

find . -type f ! -path './root/1/2/*' -print
于 2012-11-09T00:37:46.090 に答える
0

find コマンドは、ディレクトリとファイルを返します

find を使用してディレクトリを検索し、一部を除外することを検討してください

tar cvf /path/to/archive.tar $(find suite -type d ! -name 'suite/tmp/Shared/*')
于 2012-11-09T00:32:51.960 に答える