Linux: قم بفصل أرشيف يحتوي على ملفات تحمل نفس الاسم

StackOverflow https://stackoverflow.com/questions/1561306

  •  21-09-2019
  •  | 
  •  

سؤال

تم إرسال ملف مضغوط يحتوي على 40 ملفًا بنفس الاسم. أردت استخراج كل من هذه الملفات إلى مجلد منفصل أو استخراج كل ملف باسم مختلف (File1 ، File2 ، إلخ).

هل هناك طريقة للقيام بذلك تلقائيًا باستخدام أدوات Linux القياسية؟ لم يكشف فحص رجل Unzip عن أي شيء يمكن أن يساعدني. لا يبدو أن Zipsplit يسمح بتقسيم تعسفي لملفات الرمز البريدي (كنت أحاول تقسيم الرمز البريدي إلى 40 أرشيفًا ، يحتوي كل منهما على ملف واحد).

في الوقت الحالي ، أنا (ص) أتعامل مع ملفاتي بشكل فردي. هذه ليست مشكلة كبيرة مع أرشيف ملف 40 ، ولكن من الواضح أنه لا يمكن تشديده.

أي شخص لديه طريقة لطيفة وبسيطة للقيام بذلك؟ أكثر فضولاً من أي شيء آخر.

شكرًا.

هل كانت مفيدة؟

المحلول

على افتراض عدم وجود مثل هذه الأداة حاليًا ، يجب أن يكون من السهل جدًا كتابة واحدة في بيثون. بيثون لديه وحدة zipfile يجب أن يكون ذلك كافيًا.

شيء من هذا القبيل (ربما ، لم يخبر):

#!/usr/bin/env python

import os
import sys
import zipfile

count = 0

z = zipfile.ZipFile(sys.argv[1],"r")

for info in z.infolist():
    directory = str(count)
    os.makedirs(directory)
    z.extract(info,directory)
    count += 1

z.close()

نصائح أخرى

أعلم أن هذا يبلغ من العمر عامين ، لكن الإجابات أعلاه لم تحل مشكلتي الخاصة هنا ، لذلك اعتقدت أنه يجب علي المضي قدمًا ونشر حلًا يعمل بالنسبة لي.

بدون البرمجة النصية ، يمكنك فقط استخدام إدخال سطر الأوامر للتفاعل مع واجهة نص أدوات UNZIP. هذا هو ، عندما تكتب هذا في سطر الأوامر:

unzip file.zip

ويحتوي على ملفات تحمل نفس الاسم ، وسوف يطالبك بـ:

replace sameName.txt? [y]es, [n]o, [A]ll, [N]one, [r]ename:

إذا كنت ترغب في القيام بذلك باليد ، فستكتب "R" ، ثم في المطالبة التالية:

new name:

يمكنك فقط كتابة اسم الملف الجديد.

لأتمتة هذا ، ما عليك سوى إنشاء ملف نصي مع الردود على هذه المطالبات واستخدامه كمدخلات لـ UNXIP ، على النحو التالي.

r
sameName_1.txt
r
sameName_2.txt
...

يتم إنشاؤه بسهولة باستخدام لغة البرمجة النصية المفضلة لديك. احفظه كـ unzip_input.txt ثم استخدمه كمدخل لفك الضغط مثل هذا:

unzip < unzip_input.txt

بالنسبة لي ، كان هذا صداعًا أقل من محاولة الحصول على وحدات استخراج Perl أو Python التي تعمل بالطريقة التي أحتاجها. أمل أن هذا يساعد شخصاما...

هنا إصدار نص Linux

في هذه الحالة ، 834733991_t_ontime.csv هو اسم الملف الذي هو نفسه داخل كل ملف مضغوط ، و .csv بعد "$ count" يجب تبديله ببساطة بنوع الملف الذي تريده

#!/bin/bash

count=0

for a in *.zip
do
    unzip -q "$a"
    mv 834733991_T_ONTIME.csv "$count".csv
    count=$(($count+1))
done`
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top