.zip内に親ディレクトリがあるかどうかを事前に知る方法

.zip内に親ディレクトリがあるかどうかを事前に知る方法

何度も、私が持っていると言うと、解凍されa.zipますa/*

しかし、通常、すべてのコンテンツを現在のディレクトリに漏らすいくつかのzipファイルがあります。これを行うには、手動でディレクターを作成してa抽出する必要があります。

しかし、戦略に応じて常にディレクトリを作成し、zip結果が最初の場合、私の構造は理想的にはa/a/*見えません。

上記の2つのタイプに関係なく、開梱a.zipする方法はありますかa/*

ベストアンサー1

この試み:

archive="archive.zip"
has_parent=$(unzip -l "$archive" | tail -n+4 | head -n-2 | awk '{split($NF,a,"/");print a[1]}' | sort -u | wc -l)
if test "$has_parent" -eq 1; then
  unzip $archive
else
  dir="./$(basename ${archive%%.zip})"
  mkdir "$dir"
  unzip -d "$dir" $archive
fi

以下を使用している場合は、線をこれに押し出すことがzipinfoできます$has_parent

has_parent=$(zipinfo -1 "$archive" | awk '{split($NF,a,"/");print a[1]}' | sort -u | wc -l)

アイデアは簡単です。アーカイブのルートレベルに複数のファイルがある場合は、解凍すると明らかに現在のディレクトリが破壊されるため、事前に親ディレクトリを作成し、その中にファイルを解凍する必要があります。それ以外の場合、アーカイブ内のすべてのファイルが同じ親ファイルを持つ場合は、現在のディレクトリに解凍できます。

おすすめ記事