Bash 如何提取多层嵌套的多格式压缩文件

Bash 如何提取多层嵌套的多格式压缩文件,bash,shell,ubuntu,Bash,Shell,Ubuntu,我有一些多层组织的压缩文件,用不同的方法压缩。示例结构如下所示(为了简单起见,省略了非压缩数据文件) 如何将所有文件提取到新文件夹中并保持此结构不变?我已经搜索并得到了类似于find的东西-depth-name'*.zip'-exec/usr/bin/unzip-n{}-行政长官{},但它只能解压缩*.zip 您可以对每种文件类型使用一次该模式: find . -depth -name '*.zip' -exec unzip -n {} \; -delete find . -depth -nam

我有一些多层组织的压缩文件,用不同的方法压缩。示例结构如下所示(为了简单起见,省略了非压缩数据文件)


如何将所有文件提取到新文件夹中并保持此结构不变?我已经搜索并得到了类似于
find的东西-depth-name'*.zip'-exec/usr/bin/unzip-n{}-行政长官{}
,但它只能解压缩
*.zip

您可以对每种文件类型使用一次该模式:

find . -depth -name '*.zip' -exec unzip -n {} \; -delete
find . -depth -name '*.tar.gz' -exec tar zxf {} \; -delete
find . -depth -name '*.rar' -exec unrar x {} \; -delete
诚然,这个解决方案遍历目标路径的次数与您遍历文件类型的次数相同,但它的优点是简单

您可以使用一个
find
来处理所有文件类型,但可读性会受到一些影响:

find . -depth \( -name '*.zip' -exec unzip -n {} \; -delete \) \
           -o \( -name '*.tar.gz' -exec tar zxf {} \; -delete \) \
           -o \( -name '*.rar' -exec unrar x {} \; -delete \)

当心42.zip()或quines()之类的拉链炸弹。@melpomene感谢您提供的有趣而有用的建议。但是整个zip文件不会超过1M,并且不是自包含的。解包后是否要删除或保留存档?
find . -depth \( -name '*.zip' -exec unzip -n {} \; -delete \) \
           -o \( -name '*.tar.gz' -exec tar zxf {} \; -delete \) \
           -o \( -name '*.rar' -exec unrar x {} \; -delete \)