最上位ディレクトリを作成せずに特定のディレクトリを解凍します


11

すべてのファイルが保存されている最上位ディレクトリがあるZIPファイルがあります。

Release/
Release/file
Release/subdirectory/file
Release/subdirectory/file2
Release/subdirectory/file3

Releaseディレクトリ構造を維持したまま、すべてを抽出したいのですが、これを実行すると:

unzip archive.zip Release/* -d /tmp

トップReleaseフォルダーを作成します。

/tmp/Release/
/tmp/Release/file
/tmp/Release/subdirectory/file
/tmp/Release/subdirectory/file2
/tmp/Release/subdirectory/file3

次のように、フォルダーRelease 作成せずにすべてを内部に抽出する方法Release

/tmp/
/tmp/file
/tmp/subdirectory/file
/tmp/subdirectory/file2
/tmp/subdirectory/file3

これを試してくださいunzip archive.zip && mv Release/* .
ジョージウドセン

@ジョージこれはまだReleaseフォルダーを作成します
-jsta

回答:


5

あなたの場合、ターゲットフォルダで試してください:

ln -s Release . && unzip <YourArchive>.zip

作成したリンクを削除する必要があるより:

rm Release

3

jフラグは、フォルダの作成を防ぐ必要がありますunzip -j archive.zip -d .

manページから:

-j 

junk paths. The archive's directory structure is not recreated; 
all files are deposited in the extraction directory (by default, the
current one).

8
これは近いと思いますが、OPは最上位ディレクトリの作成のみをスキップし、残りのディレクトリ構造を保持することを目指していました。この-jオプションは、アーカイブ内のディレクトリ構造に関係なく、すべてのファイルを現在のディレクトリにダンプします。
チャールズグリーン

1

抽出されたツリーを平坦化するためのPythonスクリプト

以下に記述されているスクリプトは、zipファイルを抽出し、最上位ディレクトリに含まれるファイルをそこから現在の作業ディレクトリに移動します。この簡単なスクリプトは、すべてのファイルを含む最上位のディレクトリが1つだけであるという特定の質問に合わせて調整されていますが、より一般的な場合にはいくつかの編集を行うことができます。

#!/usr/bin/env python3
import sys
import os
from zipfile import PyZipFile
for zip_file in sys.argv[1:]:
    pzf = PyZipFile(zip_file)
    namelist=pzf.namelist()
    top_dir = namelist[0]
    pzf.extractall(members=namelist[1:])
    for item in namelist[1:]:
        rename_args = [item,os.path.basename(item)]
        print(rename_args)
        os.rename(*rename_args)
    os.rmdir(top_dir)

テスト走行

スクリプトがどのように機能するかの例を次に示します。すべてが現在の作業ディレクトリに抽出されますが、ソースファイルは完全に異なるディレクトリにある場合があります。テストは、個人用githubリポジトリのzipアーカイブで実行されます。

$ ls                                                                                   
flatten_zip.py*  master.zip
$ ./flatten_zip.py master.zip                                                          
['utc-time-indicator-master/.gitignore', '.gitignore']
['utc-time-indicator-master/LICENSE', 'LICENSE']
['utc-time-indicator-master/utc-time-indicator', 'utc-time-indicator']
['utc-time-indicator-master/utc_indicator.png', 'utc_indicator.png']
$ ls
flatten_zip.py*  LICENSE  master.zip  utc_indicator.png  utc-time-indicator

ソースファイルを別の場所に置いてテストする

$ mkdir test_unzip
$ cd test_unzip
$ ../flatten_zip.py  ../master.zip                                                     
['utc-time-indicator-master/.gitignore', '.gitignore']
['utc-time-indicator-master/LICENSE', 'LICENSE']
['utc-time-indicator-master/utc-time-indicator', 'utc-time-indicator']
['utc-time-indicator-master/utc_indicator.png', 'utc_indicator.png']
$ ls
LICENSE  utc_indicator.png  utc-time-indicator
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.