我有一个旧的脚本,我把归档文件的内容提取到一个新的目录中,这个目录的名字就是归档文件的名字。我需要简化这个脚本,因为我发现它效率很低,因为命令无论如何都要运行。我不是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
2条答案
按热度按时间t98cgbkg1#
您可以使用
file
或其他更智能的方法手动检查文件类型,但我的建议是更改您的工具。atool
可以处理几乎任何归档格式,并将其解归档到与创建目录的方式相同的目录中,(如果已经有同名的文件或目录,则创建一个目录Unpack-[random number]
)。然后,您可以只使用一个循环,无需创建目标目录。atool
可用于大多数软件包系统信息库。如果这对您不起作用,我认为使用Python或其他语言来完成这些繁琐的工作会更容易:写出一个文件类型和解归档命令的字典,然后使用类似的循环并从更高级别的脚本中调用命令。
gorkyyrv2#
谢谢你的反馈,我最后做了别的事情。
这就是我想做的,只尝试创建一次目录,并在unrar或unzip之间做出选择。而且,比我以前拥有的干净得多。