Linux:解压缩包含同名文件的归档文件

t9aqgxwy  于 2022-12-26  发布在  Linux
关注(0)|答案(5)|浏览(273)

我被发送了一个包含40个同名文件的zip文件。我想将这些文件中的每一个提取到一个单独的文件夹中,或者提取每个名称不同的文件(file1,file2等)。
有没有一种方法可以用标准的linux工具自动完成这个任务呢?检查man unzip没有发现任何可以帮助我的东西。zipsplit似乎也不允许任意分割zip文件(我试图将zip分割成40个归档,每个包含一个文件)。
目前我正在(r)单独命名我的文件。这对40个文件的归档来说不是什么大问题,但显然是不可伸缩的。
有人有一个很好的,简单的方法来做这个吗?比什么都好奇。
谢谢。

b91juud3

b91juud31#

假设目前还没有这样的工具,那么用python编写一个工具应该很容易,Python有一个zipfile module应该足够了。
类似这样的东西(可能,未经测试):

#!/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()
4jb9z9bj

4jb9z9bj2#

我知道这是一个几年前,但上面的答案并没有解决我在这里的特殊问题,所以我想我应该继续张贴一个解决方案,为我工作。
如果不使用脚本,你可以只使用命令行输入来与解压缩工具的文本界面交互,也就是说,当你在命令行中输入以下内容时:

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提取模块按照我需要的方式工作更令人头痛。希望这对一些人有帮助...

qzlgjiam

qzlgjiam3#

以下是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`
polhcujo

polhcujo4#

这个线程是旧的,但仍有改进的空间。我个人更喜欢bash中的以下一行程序

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

删除扩展并使用

az31mfrm

az31mfrm5#

使用unzip -B file.zip对我来说很有用,它创建了一个后缀为~<number>的备份文件,以防文件已经存在。
例如:

$ rm *.xml
$ unzip -B bogus.zip
Archive:  bogus.zip
  inflating: foo.xml
  inflating: foo.xml
  inflating: foo.xml
  inflating: foo.xml
  inflating: foo.xml
$ ls -l
-rw-rw-r--  1 user user    1161 Dec 20 20:03 bogus.zip
-rw-rw-r--  1 user user    1501 Dec 16 14:34 foo.xml
-rw-rw-r--  1 user user    1520 Dec 16 14:45 foo.xml~
-rw-rw-r--  1 user user    1501 Dec 16 14:47 foo.xml~1
-rw-rw-r--  1 user user    1520 Dec 16 14:53 foo.xml~2
-rw-rw-r--  1 user user    1520 Dec 16 14:54 foo.xml~3

Note: the -B option does not show up in unzip --help , but is mentioned in the man pages: https://manpages.org/unzip#options

相关问题