.tarファイルに抽出するのに適したtarファイルを作成したいと思います/
。ファイルシステムのルートを表し、以下のtarに含めるすべてのエントリ(たとえば)、その他のディレクトリとetc/rc.d/init.d/glassfish3
ファイルopt/glassfish3/...
を含む作業ディレクトリを作成しましたopt/...
。
これにより、tarファイルにtar zcvpf files.tgz *
中間ディレクトリ(たとえばetc
、および)が含まれますetc/rc.d
。opt
その後、別のシステムに抽出すると/
正常に動作しないため、そのディレクトリの所有権と権限が破損します。私は本当にそれらを放っておき、触れたくなかった。
だから私はこの問題に対する良い解決策を見つけたと思います。
find . -type f -print0 | tar zcvpf files.tgz --null --files-from -
ファイルのみを含むtarを生成します。これは素晴らしいです。私が入れたファイルだけがインポートされます...しかし、次の重要なリーフディレクトリはインポートされません。
opt/glassfish3/glassfish/lib/asadmin
これは空のディレクトリです(Glassfish3ではこれを要求し、そうでなければ文句を言います)。
中間ディレクトリはスキップし、最終ディレクトリはスキップしないtarファイルを作成する方法は?find+awk 魔法が役に立つような気がします。しかし、1行ずつ書き込む必要はなく、読みやすさが重要です。ありがとうございます。
編集する:私はこれを見つけました。その他/より良いアイデア歓迎:
cat <(find . -type f -print0) <(find . -type d -empty -print0) | tar zcvpf files.tgz --null --files-from -
ベストアンサー1
find
「OR」が可能なので、-o
次のように2つのコマンドを組み合わせることができます。find
find . \( -type f -o -type d -empty \) -print0 | tar ...
または、すべてのファイルを1つのコマンドラインに配置できることを保証できる場合
find . \( -type f -o -type d -empty \) -exec tar cvfz files.tgz {} +