从 zip + rar 文件中删除子目录/子文件夹

从 zip + rar 文件中删除子目录/子文件夹

我有一堆 .zip 和 .rar 文件。其中许多文件在存档中包含子文件夹。我想从 zip 文件中删除所有文件夹,但保留其他内容。

例如

original.zip
- /foo/bar1.jpg 
- /foo/bar2.jpg
- /foo/bar3.jpg
- /foo/bar4.jpg

>>>

new.zip
- bar1.jpg 
- bar2.jpg
- bar3.jpg
- bar4.jpg

这可以是纯终端命令或 bash 脚本。我需要能够同时在 100 个 zip/rar 文件上运行它。

更新: 似乎如果不重新创建 zips + rars 就不可能实现这一点。

因此,我编写了一个小型 bash 脚本,它创建了两个目录,“cleaned”用于后处理文件,“temp”用于解压文件。它循环遍历当前目录中的所有档案(.cbr 和 .cbz 文件),为每个新文件创建一个“干净的名称”,将旧文件解压到临时目录,从临时文件创建一个新档案,并将其以干净的名称保存在“cleaned”目录中,然后清除临时文件夹。处理完所有文件后,“temp”目录将被递归删除。它如下所示:

#!/bin/bash
echo "comic cleaning!";
echo "---------------";
dir=$(pwd)/;
tmp=${dir}temp/;
clean=$(pwd)/cleaned;
cd $dir;
mkdir -p cleaned;
mkdir -p temp;
for z in *.cb*; do 
  cd $dir;
  filename=$(basename "$z");
  rawname="${filename%.*}";
  name="${rawname// /_}";
  7z e "$dir$z" -otemp/;
  cd $tmp && zip -r $clean/$name.cbz *.jpg;
  cd $tmp && rm *.*;
done
cd $dir && rm -rf $tmp;

我可能应该使用 os /tmp 目录,但我对 bash 还不熟悉,无法让它工作。有什么优化建议吗?

答案1

如果所有文件名都是唯一的,您的小脚本可能会起作用。您会遇到这样的情况吗?

original.zip
- /foo/bar1.jpg 
- /foo/bar2.jpg
- /zoo/bar1.jpg
- /zoo/bar2.jpg

您将要覆盖文件。更好的解决方案可能是将完整路径作为新文件名的一部分。例如:

foob​​ar1.jpg foobar2.jpg zoobar1.jpg zoobar2.jpg

但这样一来,您将丢失原始文件名。

只是一些想法……

相关内容