শীর্ষ ডিরেক্টরি তৈরি না করে সুনির্দিষ্ট ডিরেক্টরি আনজিপ করুন


12

আমার একটি জিপ ফাইল রয়েছে যেখানে একটি শীর্ষ ডিরেক্টরি রয়েছে যেখানে সমস্ত ফাইল সঞ্চিত রয়েছে:

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).

9
আমি মনে করি এটি নিকটে, তবে ওপি কেবল শীর্ষ স্তরের ডিরেক্টরি তৈরি করতে এবং বাকী ডিরেক্টরি কাঠামো সংরক্ষণ করার জন্য সন্ধান করছিল। -jসংরক্ষণাগারে ডিরেক্টরি কাঠামো বিবেচনা না করে বিকল্পটি সমস্ত ফাইলকে বর্তমান ডিরেক্টরিতে ফেলে দেয়।
চার্লস সবুজ

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)

টেস্ট রান

স্ক্রিপ্টটি কীভাবে কাজ করার কথা তা এখানে একটি উদাহরণ। বর্তমান চলমান ডিরেক্টরি ডিরেক্টরিতে প্রাপ্ত সমস্ত কিছুই, তবে উত্স ফাইল সম্পূর্ণরূপে ভিন্ন ভিন্ন ডিরেক্টরিতে হতে পারে। পরীক্ষাটি আমার ব্যক্তিগত গিথুব সংগ্রহশালাটির জিপ সংরক্ষণাগারে করা হয়।

$ 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.