使用单个文件解压缩存档并重命名输出以匹配存档名称

使用单个文件解压缩存档并重命名输出以匹配存档名称

目标是解压缩许多 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

相关内容