shell 将Unrar和UnZip归档文件的脚本压缩到目录中

nue99wik  于 2022-11-16  发布在  Shell
关注(0)|答案(2)|浏览(135)

我有一个旧的脚本,我把归档文件的内容提取到一个新的目录中,这个目录的名字就是归档文件的名字。我需要简化这个脚本,因为我发现它效率很低,因为命令无论如何都要运行。我不是bash的Maven,这个脚本工作了一段时间,但是最近变得难以忍受了。
我经常遇到错误,因为目录已经创建或者不是unzip/unarr存档。我不知道在启动脚本之前如何检查文件是unarr还是zip格式,所以我不知道如何组合一个合适的if/else for循环。我不是bashMaven,这只是多年前用bash编写的一个更大脚本的一小部分。

for x in $(find -name '*.cbr'); do dir=${x%%.cbr}; mkdir "$dir"; unzip -d "$dir" $x; done

for x in $(find -name '*.cbr'); do dir=${x%%.cbr}; mkdir "$dir"; unrar e $x "$dir"; done
 
for x in $(find -name '*.cbz'); do dir=${x%%.cbz}; mkdir "$dir"; unzip -d "$dir" $x; done

for x in $(find -name '*.cbz'); do dir=${x%%.cbz}; mkdir "$dir"; unrar e $x "$dir"; done
t98cgbkg

t98cgbkg1#

您可以使用file或其他更智能的方法手动检查文件类型,但我的建议是更改您的工具。atool可以处理几乎任何归档格式,并将其解归档到与创建目录的方式相同的目录中,(如果已经有同名的文件或目录,则创建一个目录Unpack-[random number])。然后,您可以只使用一个循环,无需创建目标目录。

valid_exts=("zip", "rar") # etc
for f in $(find . -type f); do
  if [[ "${valid_exts[*]}" == *"${f: -3}"* ]]; then
    aunpack "$f"
  fi
done

atool可用于大多数软件包系统信息库。
如果这对您不起作用,我认为使用Python或其他语言来完成这些繁琐的工作会更容易:写出一个文件类型和解归档命令的字典,然后使用类似的循环并从更高级别的脚本中调用命令。

gorkyyrv

gorkyyrv2#

谢谢你的反馈,我最后做了别的事情。

for x in $(find -name '*.cbr' -o -name '*.cbz');
 do dir=${x%.*};
     mkdir "$dir";
     unrar e $x "$dir" || unzip -d "$dir" $x;
 done

这就是我想做的,只尝试创建一次目录,并在unrar或unzip之间做出选择。而且,比我以前拥有的干净得多。

相关问题