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

Lau*_*nol 5 command-line bash zip rename

目标是解压缩许多 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
    ...   - ...
Run Code Online (Sandbox Code Playgroud)

输出应该是

./zips/
    a.txt
    b.txt
    c.txt
    d.txt
    ...  
Run Code Online (Sandbox Code Playgroud)

当前最佳镜头,它提取了所有内容,但给我留下了大量文件夹:

for z in *.zip; do unzip $z -d $(echo 'dir_'$z); done
Run Code Online (Sandbox Code Playgroud)

也许像

for z in *.zip; do unzip $z; mv 'content_name.txt' $z; done
Run Code Online (Sandbox Code Playgroud)

但是内容名称是如何获得的呢?

Jef*_*ler 8

您可以继续这个-d想法,只需将任何提取的文件重命名为所需的“zip 名称减去 zip 加 txt”:

mkdir tmp
for f in *.zip; do unzip "$f" -d tmp && mv tmp/* "${f%.zip}.txt"; done
rmdir tmp
Run Code Online (Sandbox Code Playgroud)

或者,您可以将 unzip 的输出通过管道传输到适当命名的文件中:

for f in *.zip; do unzip -p "$f" > "${f%.zip}.txt"; done
Run Code Online (Sandbox Code Playgroud)