6

同じ名前の40個のファイルを含むzipファイルが送信されました。これらの各ファイルを個別のフォルダーに抽出するか、異なる名前(file1、file2など)で各ファイルを抽出したかったのです。

標準のLinuxツールでこれを自動的に行う方法はありますか?男の解凍をチェックしたところ、私を助けることができるものは何も見つかりませんでした。zipsplitは、zipファイルを任意に分割することもできないようです(zipを40のアーカイブに分割しようとしていて、それぞれに1つのファイルが含まれていました)。

現在、ファイルを個別に(r)エナイジングしています。これは、40ファイルのアーカイブではそれほど問題にはなりませんが、明らかにスケーラブルではありません。

誰かがこれを行うための素晴らしくて簡単な方法を持っていますか?何よりも好奇心が強い。

ありがとう。

4

4 に答える 4

6

そのようなツールが現在存在しないと仮定すると、Pythonでツールを作成するのは非常に簡単です。Pythonには、十分な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()
于 2009-10-13T16:31:27.703 に答える
3

私はこれが数年前であることを知っていますが、上記の答えはここでの私の特定の問題を解決しなかったので、私は先に進んで私のために働く解決策を投稿するべきだと思いました。

スクリプトを使用せずに、コマンドライン入力を使用して解凍ツールのテキストインターフェイスを操作できます。つまり、コマンドラインでこれを入力すると、次のようになります。

unzip file.zip

同じ名前のファイルが含まれている場合は、次のプロンプトが表示されます。

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

手作業でこれを実行したい場合は、「r」と入力し、次のプロンプトで次のように入力します。

new name:

新しいファイル名を入力するだけです。

これを自動化するには、次のように、これらのプロンプトへの応答を含むテキストファイルを作成し、それを解凍の入力として使用します。

r
sameName_1.txt
r
sameName_2.txt
...

これは、お気に入りのスクリプト言語を使用して非常に簡単に生成されます。unzip_input.txtとして保存し、次のように解凍するための入力として使用します。

unzip < unzip_input.txt

私にとって、これは、PerlまたはPythonの抽出モジュールを必要な方法で動作させようとするよりも頭痛の種ではありませんでした。これが誰かを助けることを願っています...

于 2012-12-10T18:37:22.550 に答える
2

これがLinuxスクリプトバージョンです

この場合、834733991_T_ONTIME.csvは、すべてのzipファイル内で同じファイルの名前であり、「$ count」の後の.csvは、必要なファイルタイプと交換する必要があります。

#!/bin/bash

count=0

for a in *.zip
do
    unzip -q "$a"
    mv 834733991_T_ONTIME.csv "$count".csv
    count=$(($count+1))
done`
于 2012-07-30T13:39:58.760 に答える
0

このスレッドは古いですが、まだ改善の余地があります。個人的には、bashの次のワンライナーが好きです

unzipd ()
{
    unzip -d "${1%.*}" "$1"
}

拡張機能を削除して使用するための、すてきでクリーンで簡単な方法

于 2021-01-08T14:22:13.313 に答える