目标是解压缩许多 zip 文件并将生成的文件重命名为原始存档名称。
给定一个包含许多 zip 文件的文件夹,其中大多数包含一个名为 的文件bla.txt
,但当然也有一些例外。众所周知,每个文件都有一个文件,即txt 文件。
./zips/
a.zip - contains bla.txt
b.zip - contains bla.txt
c.zip - contains somethingelse.txt
d.zip - contains bla.txt
... - ...
输出应该是
./zips/
a.txt
b.txt
c.txt
d.txt
...
当前最好的镜头,提取了所有内容,但留下了大量文件夹:
for z in *.zip; do unzip $z -d $(echo 'dir_'$z); done
也许像
for z in *.zip; do unzip $z; mv 'content_name.txt' $z; done
但内容名称是如何获取的呢?
答案1
您可以继续这个-d
想法,只需将任何提取的文件重命名为所需的“zip 名称减去 zip 加 txt”:
mkdir tmp
for f in *.zip; do unzip "$f" -d tmp && mv tmp/* "${f%.zip}.txt"; done
rmdir tmp
或者,您可以将 unzip 的输出通过管道传输到适当命名的文件中:
for f in *.zip; do unzip -p "$f" > "${f%.zip}.txt"; done
答案2
该命令unzip
有自己的选项unzip -Z1 zipfile.zip
来显示压缩文件中的实际压缩文件名,该文件采用zipinfo's
选项-1
,因为它是zipinfo -1 zipfile.zip
.因此,您可以简单地执行以下操作,无需创建临时目录,并将mv
在当前目录中完成。
for z in *.zip; do
unzip "$z";
mv "$(unzip -Z1 $z)" "${z%%.*}.txt";
done