繁体   English   中英

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

[英]Linux: Unzip an archive containing files with the same name

我收到了一个包含 40 个同名文件的 zip 文件。 我想将这些文件中的每一个提取到一个单独的文件夹中,或者用不同的名称(file1、file2 等)提取每个文件。

有没有办法使用标准的 linux 工具自动执行此操作? 检查 man unzip 没有发现任何可以帮助我的东西。 zipsplit 似乎也不允许任意拆分 zip 文件(我试图将 zip 拆分为 40 个档案,每个档案包含一个文件)。

目前我正在(r)单独命名我的文件。 这对于 40 个文件的存档来说不是什么大问题,但显然是不可扩展的。

任何人都有一个很好的,简单的方法来做到这一点? 好奇胜过一切。

谢谢。

假设目前不存在这样的工具,那么在 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()

我知道这已经有几年了,但是上面的答案并没有解决我在这里的特定问题,所以我想我应该继续发布一个对我有用的解决方案。

无需编写脚本,您只需使用命令行输入即可与解压缩工具文本界面进行交互。 也就是说,当您在命令行中键入以下内容时:

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 提取模块按我需要的方式工作更令人头疼。 希望这可以帮助某人...

这是一个 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`

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

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

漂亮、干净、简单的方法来移除扩展并使用

使用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

注意: -B选项没有出现在unzip --help中,但在手册页中提到: https ://manpages.org/unzip#options

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM