我收到了一个包含40个同名文件的zip文件。 我想将每个文件提取到一个单独的文件夹中,或者用不同的名称(file1,file2等)提取每个文件。
有没有办法用标准的linux工具自动完成?男人解压缩的检查显示没有任何可以帮助我的东西。 zipsplit似乎也不允许任意分割zip文件(我试图将zip分成40个档案,每个档案包含一个文件)。
目前我(r)单独命名我的文件。这对40文件存档来说不是一个问题,但显然是不可扩展的。
任何人都有一个很好的,简单的方法吗?比其他任何事都更好奇。
感谢。
答案 0 :(得分:7)
假设当前不存在这样的工具,那么在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()
答案 1 :(得分: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提取模块以我需要的方式工作而头疼。希望这有助于某人...
答案 2 :(得分:2)
这是一个linux脚本版本
在这种情况下,834733991_T_ONTIME.csv是每个zip文件中相同文件的名称,而#34; $ count&#34;之后的.csv。只需要与您想要的文件类型交换
#!/bin/bash
count=0
for a in *.zip
do
unzip -q "$a"
mv 834733991_T_ONTIME.csv "$count".csv
count=$(($count+1))
done`
答案 3 :(得分:0)
这个帖子很老了,但仍有改进的空间。我个人更喜欢 bash 中的以下单行
unzipd ()
{
unzip -d "${1%.*}" "$1"
}
删除扩展并使用该扩展程序的好、干净且简单的方法